在制作iPhone应用程序时,从xcodebuild中设置configuration文件
我正在使用xcodebuild
从命令行编译我的iPhone应用程序。 有没有办法通过某种选项来设置configuration文件? 一般来说似乎没有太多有关xcodebuild的信息。
文档
从文档看来,你不能设置configuration文件,但你可以指定目标:
[-target targetname]
因此,如果您为每个configuration文件创build目标,则可以从命令行中select适当的目标。
这基本上可以完成你的要求。
其实,你应该可以把它添加到XCode命令行设置。
xcodebuild [其他任何选项] PROVISIONING_PROFILE =“[您的个人资料唯一ID]
从命令行构build设置应该覆盖一切,所以这应该胜过在项目或目标中定义的任何东西。
我的解决scheme不是优雅的,但它确实做了这个工作,让我自动化生成服务器上的一切:
#!/bin/bash TARGET="Your App" CONFIGURATION="Release" SDK="iphoneos" PROFILE_PATH="/Users/jkp/Desktop/foo.mobileprovision" IDENTITY="iPhone Distribution: Your Company Ltd" KEYCHAIN="/Users/jkp/Desktop/keychain" PASSWORD="foobar" open "${PROFILE_PATH}" sleep 5 osascript -e "tell application \"Xcode\" to quit" security unlock-keychain -p ${PASSWORD} ${KEYCHAIN} xcodebuild \ -target "${TARGET}" \ -configuration ${CONFIGURATION} \ -sdk iphoneos \ CODE_SIGN_IDENTITY="${IDENTITY}" \ OTHER_CODE_SIGN_FLAGS="--keychain ${KEYCHAIN}"
这里的关键是我不需要首先安assembly置文件。 实际上我有另外一个脚本,在每次构build之前使用机械化来下载configuration文件的最新副本,这意味着我们可以远程更新configuration文件(例如添加新设备),并且无需任何额外的工作即可使CI服务器获取这些更改。
注意:我已经find了一种安装或更新configuration文件的方法,根本不需要涉及Xcode – 非常干净! 看到这里的全部细节。
供应configuration文件必须由UUID提供,就我而言,供应configuration文件将签入到源代码pipe理系统,因此,开发人员/构build服务器/ CI系统使用代码签出。 在源码树中,configuration文件具有人类可读的名称,如MyApp.mobileprovison,并位于名为“ProvisioningProfiles”的目录中。 要创build一个Xcode档案,configuration文件必须重命名并复制到〜/ Library / MobileDevice / Provisioning Profiles目录,然后xcodebuild才能识别它们。 这是一个可以在CI构build脚本中使用的代码片段。
# The keychain needs to be unlocked for signing, which requires the keychain # password. This is stored in a file in the build account only accessible to # the build account user if [ ! -f $HOME/.pass ] ; then echo "no keychain password file available" exit 1 fi case `stat -L -f "%p" $HOME/.pass` in *400) ;; *) echo "keychain password file permissions are not restrictive enough" echo "chmod 400 $HOME/.pass" exit 1 ;; esac # # unlock the keychain, automatically lock keychain on script exit # security unlock-keychain -p `cat $HOME/.pass` $HOME/Library/Keychains/login.keychain trap "security lock-keychain $HOME/Library/Keychains/login.keychain" EXIT # # Extract the profile UUID from the checked in Provisioning Profile. # uuid=`/usr/libexec/plistbuddy -c Print:UUID /dev/stdin <<< \ \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\`` # # Copy the profile to the location XCode expects to find it and start the build, # specifying which profile and signing identity to use for the archived app # cp -f ProvisioningProfiles/MyApp.mobileprovision \ "$HOME/Library/MobileDevice/Provisioning Profiles/$uuid.mobileprovision" xcodebuild -workspace MyApp.xcworkspace -scheme MyScheme \ -archivePath build/MyApp.xcarchive archive \ PROVISIONING_PROFILE="$uuid" CODE_SIGN_IDENTITY="iOS Distribution"
必须解锁钥匙串,并且必须允许“/ usr / bin / codesign”工具访问与签名身份关联的私钥才能使其工作 – 以下参考资料已被使用https://stackoverflow.com/a/21327591/ 2351246,并分别为没有Keychain的私钥ACL添encryption码 ,解锁和添encryption钥链访问。
如果要使用xcodebuild随后将存档导出到IPA,则必须考虑以下问题( xcodebuild不从.app复制文件 )。 configuration文件需要重新提供。 创buildIPA的脚本片段是
profileName=`/usr/libexec/plistbuddy -c Print:Name /dev/stdin <<< \ \`security cms -D -i ProvisioningProfiles/MyApp.mobileprovision\`` xcodebuild \ -exportArchive \ -exportFormat IPA \ -archivePath build/MyApp.xcarchive \ -exportPath $IPADIR/MyApp.ipa \ -exportProvisioningProfile "$profileName"
该命令运行时,钥匙串必须解锁。
UPDATE
在OSX Mavericks(v10.9.5)和OSX Yosemite上,我们开始看到代码签名错误:
Codesign check fails : ...../MyApp.app: resource envelope is obsolete
在这里检查这张贴的原因xcodebuild – codesign -vvvv说:“资源信封已过时”
要实现Apple Support在build议的文章中build议的更改,请运行以下命令:
sudo perl -pi.bak -e 's/--verify"./--verify", "--no-strict",/ if /codesign.*origApp/;' `xcrun -sdk iphoneos -f PackageApplication`
我意识到这可能是OP主题的一个小问题,但是当search如何让Xcode在Jenkins上工作时,这个问题首先出现。 在这里为后人发布一些额外的信息。 和点。 如果你发现这个有用,请给点:)
无论如何,最近这几次几次来了。 find这个:
http://code-dojo.blogspot.co.uk/2012/09/fix-ios-code-signing-issue-when-using.html
似乎工作。 确保:
-
首先将Xcode版本设置为常规OSX用户; 从那里build立你的可分配,通过Xcode修复任何configuration文件问题;
-
获取使用xcodebuild工作的命令行,作为一个普通的OSX用户;
-
然后按照上面信件中的说明操作,将所有iOS证书从login钥匙
~jenkins/Library/MobileDevice/Provisioning Profiles
复制到系统,并将~/Library/MobileDevice/Provisioning Profiles
复制到Jenkins用户的~jenkins/Library/MobileDevice/Provisioning Profiles
文件夹中。
下一个Jenkins构build,使用上面的步骤2中的命令,应该完美无缺地工作。
- 春季启动:是否有可能使用外部application.properties文件在任何目录与胖胖的jar?
- 如何在Symfony2 Twig模板中获取configuration参数
- 如何在rails中设置url助手的默认主机?
- 使用端口80运行Node.js的最佳实践(Ubuntu / Linode)
- 使用ConfigurationManager从任意位置加载configuration
- Xcode6错误:“找不到适用于应用程序的configurationconfiguration文件”
- 加载自定义configuration文件
- 如何使用ConfigurationElementCollection实现ConfigurationSection
- Android onConfigurationChanged没有被调用