随笔 - 269  文章 - 35  评论 - 855 

你说iOS开发简单不简单?会的不难,难的不会。

从博客园第一篇博客来看,刚开始编程时我还在读书,掐指一算,到现在已经将近十年,语言之中经历了从asp到vb到C#及VB.Net到java到php到OC到Swift的转换,期间夹杂着些许其他的零散的只能说得上会用的语言,也算是掌握了多种外语了吧?

言归正传,现在开始写用Swift开发framework基础指南,按照本指南一步一步做,就能拥有你自己的framework, 简单到暴。

Step0.0: 基础,动态库,静态库?

很早以前,有这样一个传言,说如果你的app引用了动态库的话,会无法上架。到了2018年,你如果提供了framework而不是.a形式的库,就无所谓静态动态了,都能上架,放心开发。

如果对于静态和动态有疑问的话,就这么想:静态库在编译时就会编译进应用中,动态库在编译期不会被编译进应用,在运行时才会被调用。

Step0.1: Swift? OC

我强烈推荐Swift,用过它之后再回来看OC,你会发现自己多敲了那么多本可以省去的代码,多操了那么多不该操的心。。

 

Step1: 创建SDK项目

为了让你阅读更用心,以下每一步我都不截图,一步一步跟着操作时要仔细哦。

打开Xcode, File->New 选择 Framework & Library类型,选择Cocoa Touch Framwork类型,点Next, 记得语言选Swift,填入必备的信息,创建成功,假如项目名称为DemoSDK,那么你会看到有一个DemoSDK.h文件,不用管它。

然后我们新建个Swift类,记得用public 修饰符修饰class,否则外部引用时找不到该类。代码如下:

import UIKit

 

public class PrintHelper: NSObject {

    public func printString(filePath: String){

        print(filePath)

    }

}

 

Step2: 编译打包为Framework

经过以上步骤,就完成了一个最简单的framework逻辑,按下Command+B,就编译成功了。在项目的Product文件夹下能看到一个叫DemoSDK.framwork的文件,先暂时认为成功了吧。此时你就可以右击,选择Show In Finder把这个Framework提供给其他人使用了。

但...实际上,此时的Framework还只能用于一种平台,即:如果你在编译时选择的是simulator,那么只能用在simulator下,如果是真机,则只能用于真机项目下。 有什么办法像网上其他平台提供的framework那样,各种平台都能使用吗?有,往下看。

 

Step3: 打包为跨平台的Framework

 打开DemoSDK的Targets,File->New->Target 选择 Cross-platform, Other: Aggregate 点击Next,填入必要的信息,创建一个新的target,比如我们为target起名叫UniversalDemoSDK

选中UniversalDemoSDK, 选Build Phases, 点击+,增加一个Run Script

然后将如下代码复制到script区域:

#!/bin/sh

OUTPUT_DIR=${BUILD_DIR}/${CONFIGURATION}-universal
TARGET_DIR=${HOME}/Downloads

# make sure the output directory exists
mkdir -p "${OUTPUT_DIR}"

# Step 1. Build Device and Simulator versions

xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphoneos  ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -arch armv7 -arch armv7s -arch arm64 clean build

xcodebuild -target "${PROJECT_NAME}" -configuration ${CONFIGURATION} -sdk iphonesimulator ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}" -arch x86_64 clean build

# Step 2. Copy the framework structure (from iphoneos build) to the universal folder
cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${OUTPUT_DIR}/"

# Step 3. Copy Swift modules from iphonesimulator build (if it exists) to the copied framework directory
SIMULATOR_SWIFT_MODULES_DIR="${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule/."
if [ -d "${SIMULATOR_SWIFT_MODULES_DIR}" ]; then
cp -R "${SIMULATOR_SWIFT_MODULES_DIR}" "${OUTPUT_DIR}/${PROJECT_NAME}.framework/Modules/${PROJECT_NAME}.swiftmodule"
fi

# Step 4. Create universal binary file using lipo and place the combined executable in the copied framework directory
lipo -create -output "${OUTPUT_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}" "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}"

# Step 5. Convenience step to copy the framework to the project's directory
cp -R "${OUTPUT_DIR}/${PROJECT_NAME}.framework" "${TARGET_DIR}/"

# Cleaning the oldest.
if [ -d "${OUTPUT_DIR}" ]
then
rm -rf "${OUTPUT_DIR}"
fi

# Step 6. Convenience step to open the project's directory in Finder
open "${TARGET_DIR}"

 

然后在编译目标的地方,选择UniversalDemoSDK, 按下Ctrl+B,编译成功,成功之后自动打开一个文件夹,这个framework就跟网上其他平台提供的无差别了,跨平台,在simulator/真机中都能用了。

 

 

Framework的创建/打包此时已经可以正常结束了,但如何使用呢?继续看Step4

 

Step4: Framework引用

将上一步生成的Framework文件拖到项目中,然后再打开项目配置页,选General-> Embeded Binaries, 点+ 选择刚才的Framwork文件,配置就完成了。

在需要引用的文件头部, 增加DemoSDK的引用,然后就能在代码中使用framework中的类及方法了。

 

 

Step5: Framwork的调试

那么如何对framework进行调试?

创建一个新的常规项目,打开项目配置页,选择General,点击+,选Add Other, 然后找到刚才创建的DemoSDK.xcodeproj,点击确定。

然后再次点击+,选DemoSDK.framework,然后点确定。

这样就能进行framework的代码调试了。

 

参考:

https://www.jianshu.com/p/51c5376c5a36

https://www.jianshu.com/p/42070c513104

http://www.cnblogs.com/cmx-ios2014/p/3802618.html

posted on 2018-02-24 18:00 WNFK 阅读(...) 评论(...) 编辑 收藏