我正在使用phonegap CLI 3.1和XCode5。我试图通过Phonegap CLI和Xcrun生成发布模式的构建。我不想使用Phonegap Build上传mobileprovision或其中任何进程。我希望xcrun能够将mobileprovison分配给发布版本。
1)cordova build ios --release
在平台上编译应用程序" ios"通过命令 " /应用/ MAMP / htdocs中/ MyTest的/ MyTestApp /平台/ IOS /科尔多瓦/构建" - 发布 平台" ios"编译成功。
2)sudo xcrun -sdk iphoneos PackageApplication -v" ios / build / emulator / MyTestApp.app" -o" /Users/mymac/Desktop/Testnew/MyTestApp.ipa" --sign" iPhone发行版:NAME(TEAM_ID)" --embed" MyTestApp_Dis.mobileprovision"
打包应用程序:' ios / build / emulator / MyTestApp.app'
参数:embed = MyTestApp_Dis.mobileprovision verbose = 1 output = / Users / mymac / Desktop / Testnew / MyTestApp.ipa sign = iPhone Distribution:NAME(TEAM_ID)
环境变量:
HOME = / Users / mymac
SUDO_GID = 20
SDKROOT = /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk
VERSIONER_PERL_PREFER_32_BIT =没有
MAIL = / var / mail / root
SSH_AUTH_SOCK = / tmp / launch-zsBMC8 /听众
LANG = en_US.UTF-8
USER = root
LOGNAME = root
__CF_USER_TEXT_ENCODING = 0x0:0:0
USERNAME = root
PATH = / usr / bin:/ bin:/ usr / sbin:/ sbin:/ usr / local / bin:/ usr / local / git / bin
SUDO_USER = mymac
SHELL = / bin / bash
TERM = xterm-256color
SUDO_COMMAND = / usr / bin / xcrun -sdk iphoneos PackageApplication -v ios / build / emulator / MyTestApp.app -o /Users/mymac/Desktop/Testnew/MyTestApp.ipa --sign iPhone Distribution:NAME(TEAM_ID)--embed MyTestApp_Dis.mobileprovision
SUDO_UID = 501
VERSIONER_PERL_VERSION = 5.12
输出目录:' /Users/mymac/Desktop/Testnew/MyTestApp.ipa'
临时目录:' / tmp / W81FhZ9VAH' (详细设置时不会在退出时删除)
+ / bin / cp -Rp ios / build / emulator / MyTestApp.app / tmp / W81FhZ9VAH / Payload
程序/ bin / cp返回0:[]
完成检查原始应用
答案 0 :(得分:2)
当从shell运行'cordova buld ios [--release]'然后再做一个'xcrun ...'之后,它对我有效。
但是:在脚本中运行此序列时,我收到“Codeign check failed ...”错误...
如果我在cordova和xcrun调用之间的脚本中插入(如)一个“wait”循环,它就可以工作。
所以 - 对我来说 - 似乎,好像cordova在没有完全完成时返回shell(?)
事实上,如果我编写像
这样的脚本#!/bin/bash
cordova build ios --release
sleep 5
sh -c "xcrun ..."
它对我有用。
问题:这是cordova / phonegap中的错误???
答案 1 :(得分:2)
同时我发现: 事实是,当科尔多瓦退出并返回贝壳时,科尔多瓦的相关活动尚未完成!
在cordova退出后需要一段时间才能显示'platforms / ios / AppName / _CodeSignature / CodeResources'文件。这个文件显然对于由xcrun命令启动的'codesign'是必不可少的。
所以我在我的脚本中(我称之为'buildit.sh')
#!/bin/bash
[...]
cordova build ios --release
signaturefile="platforms/ios/build/device/$appname/_CodeSignature/CodeResources"
echo DEBUG:signatur file is $signaturefile
while [ ! -f $signaturefile ]
do
echo waiting
sleep 1
done
xcrun ...
然后,一个脚本中的整个构建/打包过程成功。
但是:从我的ContinuousIntegration服务器Jenkins运行脚本,我发现这个标准可能是必要的,但还不够。从CI我仍然得到了
/ usr / bin / codesign --verify -vvvv [...] 程序/ usr / bin / codesign返回1:[...]代码对象根本没有签名
错误!??
EDIT(05.12.2013):这是因为Jenkins服务无法访问钥匙串。例如。在Jenkins工作中,在运行构建脚本之前解锁钥匙串会对其进行排序。 (可能不是最优雅的解决方案,但至少它证明了问题不在脚本中:)
答案 2 :(得分:2)
所以,最后我把一切都搞定了......:D
Jenkins抱怨'codesign ...'运行失败的问题是MacOS(配置)问题
关键是允许Jenkins访问系统的钥匙串。 Jenkins用户的Login-shell允许访问权限与Jenkins用户帐户下运行的Jenkins服务器进程不同(!)
现在我通过在运行构建脚本之前在Jenkins作业中运行login.keychain的解锁来实现这一点
喜欢:在“执行shell”的Jenkins工作中
security unlock-keychain -p password /Users/Shared/Jenkins/Library/Keychains/login.keychain
echo ##### building now ######################
./buildit.sh ios --release -v
这可能不是100%最好的解决方案 - 但现在它可行:P
参见:[1]:Keychain won't unlock from Jenkins script unless user logged in
答案 3 :(得分:1)
为了跳过代码签名,您可以从控制台执行手动构建,如下所示:
xcodebuild clean build CODE_SIGN_IDENTITY =“”CODE_SIGNING_REQUIRED = NO 另外使用-configuration,-target和-sdk参数来定义构建设置。
禁用代码签名:
*转到/应用程序。 右键单击XCode并选择“显示包内容”。 将内容/开发人员/平台/ iPhoneOS.platform / Developer / SDKs / iPhoneOS5.1.sdk / SDKSettings.plist复制到您的桌面。 (确保实际复制和粘贴。没有拖放) 打开它并在DefaultProperties下将CODE_SIGNING_REQUIRED设置为NO。 将其复制并替换原始文件。 重启XCode。 打开你的项目。 在Project Navigator中,选择项目并打开项目的Build Settings部分(而不是任何特定目标) 在代码签名下找到代码签名标识以及调试和发布模式将任何iOS SKD设置为不代码签名。 现在,您应该能够毫无错误地构建项目。*
制作IPA:
在“Project Navigator”中选择“产品” 右键单击[NameOfYourProject] .app并选择“在Finder中显示”。 创建一个文件夹并将其命名为Payload 将[NameOfYourProject] .app移动到Payload。 压缩有效负载并将其重命名为[NameOfYourProject] .ipa