如何设置Bitrise来构建通用的iOS框架并部署到Cocoapods

今天,我想分享我的管道,以使用Bitrise构建和部署iOS框架。 Bitrise是适用于iOS和Android应用程序的持续集成和交付(CI / CD)服务,可帮助自动完成应用程序的运输过程,包括测试,构建,配置和提交。 实际上,它可以交付应用程序,但是仍然可以使用Bitrise交付框架或库。

建立通用框架

构建框架时,它仅包含用于构建框架的平台的符号。 这意味着,如果您为iPhone设备进行构建,则它将仅包含armv7s / arm64体系结构的符号。 同样,如果您的框架是为iPhone模拟器构建的,则仅包含X86_64 / i386的符号,并且在用于设备构建时会产生undefined symbols错误。

为了提供可在模拟器和设备上运行的iOS框架,您需要通过以下两个步骤将其构建为通用框架。

  1. 为每个平台构建两个单独的框架(iphoneos / iphonesimulator)
  2. 使用lipo命令将两者合并为一个框架。

这是制作通用框架的示例脚本,可以在Bitrise工作流程的“ 脚本”步骤中执行该脚本

  #为设备构建 
xcodebuild -workspace MyFramework.xcworkspace -scheme $ target -configuration Release -derivedDataPath $ BITRISE_DEPLOY_DIR / iphoneos -sdk iphoneos ENABLE_BITCODE = YES BITCODE_GENERATION_MODE = bitcode OTHER_CFLAGS =“-fembed-bitcode”干净的版本
  #为模拟器构建 
xcodebuild -workspace MyFramework.xcworkspace -scheme $ target -configuration Release -derivedDataPath $ BITRISE_DEPLOY_DIR / iphonesimulator -sdk iphonesimulator ENABLE_BITCODE = YES BITCODE_GENERATION_MODE = bitcode OTHER_CFLAGS =“-fembed-bitcode”清除构建
  #将设备框架复制到通用目录 
cp -R $ BITRISE_DEPLOY_DIR / iphoneos / Build / Products / Release-iphoneos / $ target.framework $ BITRISE_DEPLOY_DIR / universal
  #将设备框架与模拟器框架结合 
lipo-创建$ BITRISE_DEPLOY_DIR / iphoneos / Build / Products / Release-iphoneos / $ target.framework / $ target $ BITRISE_DEPLOY_DIR / iphonesimulator / Build / Products / Release-iphonesimulator / $ target.framework / $ target-输出$ BITRISE_DEPLOY_DIR $ target.framework / $ target
  #打包框架 
cp LICENSE $ BITRISE_DEPLOY_DIR / universal / LICENSE
cd $ BITRISE_DEPLOY_DIR /通用
邮编-r $ BITRISE_DEPLOY_DIR / MyFramework.zip *

您可以使用file命令检查框架是否正确构建。

上传您的框架并编写podspec

要通过Cocoapods分发框架,应使用LICENSE文件压缩框架,然后将其上传到网络上的公共位置。 就我而言,我借助Bitrise的Github Release步骤将其上传到单独的公共git存储库中作为发行

打包的框架上传后,您可以将其作为Pod部署到Cocoapods。 要以预构建的形式而不是源代码形式分发框架,您应该在vendored_frameworks中使用sourcevendored_frameworks ,如下所示。

  Pod :: Spec.new do | s | 
s.platform =:ios
s.ios.deployment_target ='8.0'
s.requires_arc = true

s.name =“ MyFramework”
s.summary =“ MyFramework摘要”
s.version =“ 1.0.0”
s.license = {:type =>“ MIT”,:file =>“ LICENSE”}
s.author =“ jh”。
s.homepage =“ https://github.com/MyFrameworkRepo”
  s.source = {:http =>“ https://github.com/MyFrameworkRepo/releases/download/v1.0.0/MyFramework.zip”} 

s.dependency'AFNetworking','〜> 3.0'
s.dependency'SDWebImage','〜> 4.0'
s.vendored_frameworks ='MyFramework.framework'
结束

使用Bitrise部署iOS框架的管道

  1. 做好准备后,标记新版本并将其推送到我的私人存储库中。
  2. 将自动触发名为Deploy的Bitrise工作流。
  3. Deploy工作流将构建一个通用框架,并将其作为新版本上传到公共git repo。
  4. 我修改了github发布页面上的更改日志并发布了该版本。
  5. 使用相应的版本和来源编辑podspec后,执行pod trunk push

是的,还没有完全自动化的管道! 目前,我还在自动执行第5步,并将在完成后进行更新。