XcodeBuild命令
2016-08-11 本文已影响584人
观星
1.生成xcarchive文件
如果你的工程使用了workspace,你就需要指明workspace的名称,使用了cocoapods的项目,我们在打开时都是使用xcworkspace文件,因此,在编译cocoapods项目时,必须指明workspace的名称
xcodebuild -workspace CTQProject.xcworkspace -scheme CTQProject -archivePath ~/Desktop/CTQProject.xcarchive archive
如果最后面不加上archive,则默认为build。
2.生成ipa文件
xcodebuild -exportArchive -exportFormat IPA -archivePath ~/Desktop/CTQProject.xcarchive -exportPath ~/Desktop/CTQProject.ipa
这一步可以指定Provisioning Profile 文件,加上-exportProvisioningProfile参数就可以
xcodebuild -exportArchive -exportFormat IPA -archivePath ~/Desktop/CTQProject.xcarchive -exportPath ~/Desktop/CTQProject.ipa -exportProvisioningProfile "XC Ad Hoc: com.chuangtoubang.ctb"
这个参数的值为Provisioning Profile的名称,在iOS dev center和Xcode中都可以看到,不过Xcode中貌似没有办法复制。使用Xcode打包时,你选择那个Provisioning Profile,在这里就输入那个的名字
Xcode 8下
xcodebuild -exportArchive -archivePath ~/Desktop/Live.xcarchive -exportPath ~/Desktop/Live.ipa -exportOptionsPlist ~/Desktop/adhoc.plist CODE_SIGN_IDENTITY="iPhone Distribution: XXXXXX (XXXXXX)" PROVISIONING_PROFILE="XC Ad Hoc: com.XXXXX.XXXXX"
cat ~/Desktop/adhoc.plist
<?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>compileBitcode</key>
<false/>
<key>method</key>
<string>ad-hoc</string>
</dict>
</plist>
Xcode 9
2017年12月更新:
-exportProvisioningProfile已经不能使用了,以前不设置exportProvisioningProfile让Xcode自己去找也不行了,现在必须在exportOptionsPlist中指明provisioning profile.现在手动使用Xcode带包,输出ipa的同时,exportOptionsPlist也会同时输出,直接参考那个就可以。
<?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>compileBitcode</key>
<false/>
<key>method</key>
<string>ad-hoc</string>
<key>provisioningProfiles</key>
<dict>
<key>com.yourcompany.string</key>
<string>xxx_adhoc</string>
</dict>
</dict>
</plist>
新增了
<key>provisioningProfiles</key>
<dict>
<key>com.yourcompany.string</key>
<string>xxx_adhoc</string>
</dict>
可以为不同的bundle id设置不同的provisioning profile,能解决我们现在多个bundle id自动打包的问题。
shell 获取bundle id
通过Info.plist读取,如果不是写死的,读取到的将会是
defaults read /Users/wangxuefeng/WorkSpace/XALiveSDK/Live/Info.plist "CFBundleIdentifier"
$(PRODUCT_BUNDLE_IDENTIFIER)
$(PRODUCT_BUNDLE_IDENTIFIER)显然不是我们想要的值,可以通过xcodebuild -showBuildSettings显示这些变量的值,然后提取。
var=`xcodebuild -showBuildSettings | grep PRODUCT_BUNDLE_IDENTIFIER`
echo ${var#*= }