scribble

sanlengjingvv

Blog GitHub

13 Aug 2016
iOS 打包总结

预备知识

打包机器需要安装 Xcode 7,安装 xcode command line tools (用xcode-select --install命令安装)
Xcode7.2 上架流程
iOS 开发者中的公司账号与个人账号之间有什么区别?

Bundle ID 就是 Xcode 里 iOS 项目 Target - Build Settings 下的 Bundle identifier
prefix + bundle ID 组成 App ID
Provisioning Profile 文件指定了 App ID 和 Certificate

Xcode 中 iOS 项目 Build Settings 里的

  1. Bundle ID
  2. Provisioning Profile
  3. Code Signing Identity 指定的 Certificate
    三者需要是对应的
    在一台有这个 Certificate 和 Provisioning Profile 的电脑上才可以生成这个项目的 ipa

命令行打包

使用 workspace 时的脚本

xcodebuild clean -project ./MyProject.xcodeproj -configuration Release
xcodebuild archive -workspace ./MyProject.xcworkspace -scheme MyProject -archivePath ./MyProject.xcarchive CODE_SIGN_IDENTITY="iPhone Distribution: SHANGHAI TESTERHOME GROUP CO., LTD." PROVISIONING_PROFILE="97824172-beb3-4674-a266-13f57242277f"
xcodebuild -exportArchive -archivePath ./MyProject.xcarchive -exportPath ./outputiPA -exportOptionsPlist ./exportOptions.plist

使用 project 时的脚本

xcodebuild clean -project MyProject.xcodeproj -configuration Release 
xcodebuild archive -project ./MyProject.xcodeproj -scheme MyProject -archivePath ./MyProject.xcarchive CODE_SIGN_IDENTITY="iPhone Distribution: SHANGHAI TESTERHOME GROUP CO., LTD." PROVISIONING_PROFILE="97824172-beb3-4674-a266-13f57242277f"
xcodebuild -exportArchive -archivePath ./MyProject.xcarchive -exportPath ./outputiPA -exportOptionsPlist ./exportOptions.plist

用 Xcode 打包的步骤是

  1. Product - Clean ,对应脚本中 xcodebuild clean 命令
  2. Product - Archive,对应 xcodebuild archive 命令
  3. Export ,对应xcodebuild -exportArchive
  • Scheme 参数对应 Xcode 中的 Product - Scheme ,在项目目录执行xcodebuild -list命令也可以查看
  • 勾选了 Shared 的 Scheme 会保存在 .xcodeproj/ 目录下的文件里,才会被版本控制系统记录,如果一个 Shared Scheme 也没有,打包命令不会自己结束,也不会报错。
  • CODE_SIGN_IDENTITY 参数填证书名,可以在 OS X 系统的钥匙串应用里查看
  • 钥匙串里,证书可能在登录级也可能在系统级,如果在“登录”中,其他 OS X 用户(比如java -jar jenkins.war启动的 Jenkins)执行命令时需要输入密码,把证书移到“系统”里就不用输密码了,也可以用 security unlock-keychai 命令解锁,也可以修改证书的信任设置
  • PROVISIONING_PROFILE 参数,在 Xcode - Preference - Accounts - View Details 找到对应的 Provisioning Profiles ,右键 Show in Finder,会看到一个 ~/Library/MobileDevice/Provisioning Profiles/97824172-beb3-4674-a266-13f57242277f.mobileprovision 文件,参数填文件名(不包含扩展名)
  • exportOptions.plist 文件按下面的格式写,用xcodebuild -help命令看键值对的说明
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>method</key>
	<string>enterprise</string>
	<key>compileBitcode</key>
	<string>YES</string>
</dict>
</plist>
  • 碰到过一个问题,exportOptions 说明里 compileBitcode 默认是 YES,但如果不写,集成的极光推送没有被优化,ipa 文件大了不少
  • 版本号保存在 Info.plist 文件中,可以参考这个帖子自动增加版本号
  • 在 Scheme 中指定了 archive action 的 Build Configuration 是 Release 还是 Debug ,如果指定的是 Release 想打 Debug 包,可以修改文件,也可以在命令中增加 configuration 参数
xcodebuild clean -project MyProject.xcodeproj -configuration Debug 
xcodebuild archive -project ./MyProject.xcodeproj -scheme MyProject -configuration Debug -archivePath ./MyProject.xcarchive CODE_SIGN_IDENTITY="iPhone Distribution: SHANGHAI TESTERHOME GROUP CO., LTD." PROVISIONING_PROFILE="97824172-beb3-4674-a266-13f57242277f"
xcodebuild -exportArchive -archivePath ./MyProject.xcarchive -exportPath ./outputiPA -exportOptionsPlist ./exportOptions.plist

其他
iOS开发-Xcode Debug、Release、Archive、Profile、Analyze概念解释 每个 Xcode 大版本之间经常有变动,注意以官网为准


Til next time,
黑水 at 09:45

scribble

Blog GitHub