2015-04-20 228 views
9

我们有一个API,用户可以调用它来创建Cordova应用程序/项目,上传他们的www目录,然后开始编译并下载可执行的二进制文件。这个二进制文件将进入一个私人应用程序商店。从Xcode项目导出.ipa文件而无需打开Xcode

我在编译iOS的步骤时遇到了问题。 Cordova构建步骤没有问题,但它不会输出二进制文件,就像它为Android所做的那样。阅读一切,我发现#2和其他地方后,我们的计划是这样的:

xcodebuild clean -configuration Release -alltargets 
xcodebuild -scheme MyApp archive -archivePath build/MyApp 
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "My Prov Profile" 

鉴于签署的身份,一切都设置正确,它几乎工作。第一个命令执行得很好。第二个命令只是挂起。但是,如果我在Xcode中打开项目,然后执行这些命令,它会编译并导出,并且剩下一个.ipa文件,这正是我想要的。看起来Xcode在第一次打开项目时设置了一个工作区和一些与方案有关的事情。

有没有什么办法可以让xcodebuild(或者xcrun,或者其他什么)为我创建这个工作区文件?

还有另一种方法来解决这个问题吗?

现在,我有一个解决方案,我实际上打开Xcode项目,等待15秒,然后继续。但我可以想象一下,在某种程度上会失败的一千种方法,所以我想将其改为更优雅一些。

我目前已经安装了Xcode 6.3,如果这是相关的。


更新:欧泊的答案下面设置我在正确的道路(我认为)。我最终做的是按照Opal的链接导出共享方案,并将其用作未来应用程序的模板。解决方案是这样的:

# Copy shared scheme file into directory 
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata 
mkdir /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes 
cp data/MyScheme.xcscheme /path/to/project/dir/MyApp.xcodeproj/xcshareddata/xcschemes/. 

# Use sed to replace app name in scheme file 
sed -i '' "s/%app_name%/MyApp/g" MyApp.xcodeproj/xcshareddata/xcschemes/MyScheme.xcscheme 

# CD into directory 
cd /path/to/project/dir 

# Move files from Cordova to our build directory 
cp -r CordovaLib/build/* build/. 

# Build and export 
xcodebuild clean -configuration Release -alltargets 
xcodebuild -scheme MyScheme archive -archivePath build/MyApp 
xcodebuild -exportArchive -exportFormat ipa -archivePath "build/MyApp.xcarchive" -exportPath "MyApp.ipa" -exportProvisioningProfile "MyProvProfile" 
+0

似乎项目中的方案不共享,并且xcode在打开项目后创建它们。你需要共享计划。 – Opal

+0

@Opal好的。我如何去设置共享方案​​? –

+0

请参阅此处:https://github.com/facebook/xctool在README部分。 – Opal

回答

2

看来你尝试建立应用程序没有共享方案。方案如果不共享,则在项目加载到xcode时创建。要创建共享方案,请参阅this网站。

0

这些是我用来在我的cordova环境中无需打开xcode就自动生成ipa代的步骤。 (Xcode的版本:6.0.1版本科尔多瓦:3.6.0)

  • 变化科尔多瓦/ build.xcconfigCODE_SIGN_IDENTITY = iPhone分布(其他城市 “开发” 到 “分配”。)
  • 在生成.app文件使用
  • 注册科尔多瓦工作区运行cordova build ios --devicexcrun -sdk iphoneos PackageApplication -v ${WORKSPACE}/platforms/ios/build/device/${application.name}.app -o ${WORKSPACE}/platforms/ios/build/${application.name}.ipa --embed ${ios.distribution.provisionfile}.mobileprovision --sign ${code.signing.identity}
+0

谢谢,但这不适用于我,我得到一个错误说第一个“警告:使用 - 保留 - 元数据与选项”资源规则“(在Mac OS X> = 10.10弃用!)”,然后“/var/folders/8l/l22zrl_n2v34qfxzwfpbdjxc0000gn/T/wh4epkuky9/Payload/TestMac.app/ResourceRules.plist:无法读取资源”。 –

+0

哦,好的!我正在使用OS X 10.9.5。我会更新并尝试解决此问题。感谢您的更新。 – kumar