iOS|iOS SDK 从开发到发布

创建 SDK 工程 创建 workspace 用以管理 SDK 和 Demo project

iOS|iOS SDK 从开发到发布
文章图片
创建 Cocoa Touch Framework 并加入到之前创建的 workspace 里
iOS|iOS SDK 从开发到发布
文章图片
iOS|iOS SDK 从开发到发布
文章图片
iOS|iOS SDK 从开发到发布
文章图片
更改工程设置
  • 1 、更改 Development InfoTarget 到目标系统版本
iOS|iOS SDK 从开发到发布
文章图片
  • 2 、 确认 Target --> Build Settings --> Mach-O Type 为 Dynamic
iOS|iOS SDK 从开发到发布
文章图片
  • 3 、更改 Target --> Build Settings --> Build Active Architchture Only 为 NO
iOS|iOS SDK 从开发到发布
文章图片
  • 4 、更改 Target --> Build Settings --> Bitcode 为 NO
iOS|iOS SDK 从开发到发布
文章图片
  • 5 、 更改 Edit scheme -> Run -> Build Configuration 为 Release
iOS|iOS SDK 从开发到发布
文章图片
配置公共头文件
  • 1 、 添加测试代码
iOS|iOS SDK 从开发到发布
文章图片
  • 2 、设置测试类的头文件 .h 为 public
iOS|iOS SDK 从开发到发布
文章图片
  • 3 、 在 MFramework.h 文件中引入所有公开的头文件
iOS|iOS SDK 从开发到发布
文章图片
以上是 SDK 配置集成过程 ?? ?? ?? 创建 Demo 工程 创建 MDemo project,加入之前创建的 workspace。
iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片

更改 MDemo 工程设置
iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片
集成 SDK 测试
  • 1、在 Target -> General 配置 Linked Framework 和 Embeded Binaries 为 MFramework
iOS|iOS SDK 从开发到发布
文章图片
  • 2 、调用 MFramework 的测试代码,console 打印如预期
iOS|iOS SDK 从开发到发布
文章图片
本地打包 手动发布 【iOS|iOS SDK 从开发到发布】创建 Cross-platform 的 Aggregate,执行 build 脚本,通过 lipo 命令将之前构建好的 模拟器架构的 SDK 产物 和 真机架构的 SDK 产物 合成 适用于真机和模拟器的 SDK 产物
  • 1、 创建 Cross-platform 的 Aggregate
iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片
  • 2 、修改 Configuration, 添加 Dependency 和 Build Script
iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片
  • 3 、具体脚本代码
    TARGET_NAME=${PROJECT_NAME} OUTPUT_DIR=${SRCROOT}/Products/${TARGET_NAME}.framework DEVICE_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphoneos/${TARGET_NAME}.framework SIMULATOR_DIR=${BUILD_ROOT}/${CONFIGURATION}-iphonesimulator/${TARGET_NAME}.frameworkif [ -d "${OUTPUT_DIR}" ] then rm -rf "${OUTPUT_DIR}" fimkdir -p "${OUTPUT_DIR}" cp -R "${DEVICE_DIR}/" "${OUTPUT_DIR}/"lipo -create "${DEVICE_DIR}/${TARGET_NAME}" "${SIMULATOR_DIR}/${TARGET_NAME}" -output "${OUTPUT_DIR}/${TARGET_NAME}"open "${SRCROOT}/Products"

  • 4.1 、构建 MFramework 的 模拟器 产物
iOS|iOS SDK 从开发到发布
文章图片
  • 4.2 、构建 MFramework 的 真机 产物
iOS|iOS SDK 从开发到发布
文章图片
  • 4.3 、构建 MFrameworkCommon,通过 Build Script 会产生 支持模拟器和真机的 SDK 产物。
iOS|iOS SDK 从开发到发布
文章图片

iOS|iOS SDK 从开发到发布
文章图片
  • 5 、 MDemo 工程集成 SDK 产物 MFramework.framework,添加 Embedded Binaries 和 Linked Frameworks.
iOS|iOS SDK 从开发到发布
文章图片
  • 1、其他脚本代码参考
# 环境变量 #version=$MajorVersion"."$MinorVersion"."$FixVersion"."$BuildNo #shortVersion=$MajorVersion"."$MinorVersion"."$FixVersion version=2.3.4.5 shortVersion=2.3.4xcworkspace="DevFramework" scheme="MFramework" configuration="Release"WORKSPACE=`pwd` RESULT_DIR=$WORKSPACE/result# 清理工作区 rm -r ~/Library/Developer/Xcode/Archives/`date +%Y-%m-%d`/$scheme\ *.xcarchive xcodebuild clean -workspace $xcworkspace.xcworkspace -scheme $scheme -configuration $configuration# 更新版本号 /usr/libexec/PlistBuddy -c "Set :CFBundleVersion $version" $scheme/$scheme/Info.plist /usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $shortVersion" $scheme/$scheme/Info.plist# 分别编译真机和模拟器的 framework xcodebuild -workspace $xcworkspace.xcworkspace -scheme $scheme -configuration $configuration ONLY_ACTIVE_ARCH=NO -sdk iphoneos BUILD_DIR="$RESULT_DIR" BUILD_ROOT="${BUILD_ROOT}" clean build if ! [ $? = 0 ] ; then echo "xcodebuild iphoneos fail" exit 1 fixcodebuild -workspace $xcworkspace.xcworkspace -scheme $scheme -configuration $configuration ONLY_ACTIVE_ARCH=NO -sdk iphonesimulator BUILD_DIR="$RESULT_DIR" BUILD_ROOT="${BUILD_ROOT}" clean build if ! [ $? = 0 ] ; then echo "xcodebuild iphonesimulator fail" exit 1 fi# 合并 framework,输出适用真机和模拟器的 framework 到 result 目录 cp -R "$RESULT_DIR/${configuration}-iphoneos/${scheme}.framework/" "$RESULT_DIR/${scheme}_${version}.framework/" lipo -create "$RESULT_DIR/$configuration-iphonesimulator/${scheme}.framework/${scheme}" "$RESULT_DIR/${configuration}-iphoneos/${scheme}.framework/${scheme}" -output "$RESULT_DIR/${scheme}_${version}.framework/${scheme}" if ! [ $? = 0 ] ; then echo "lipo create framework fail" exit 1 fi

版本号设置
Framework 一定要配置版本号的,这样方便用户(SDK使用者)接入合适目标版本,也有利于后期的定位问题和开发维护。
版本号格式推荐是 主版本.特性版本.修正版本.持续构建build号,具体如何配置可以参考上面的【持续构建 自动发布】。

    推荐阅读