我正在尝试构建一个系统,该系统可以根据源代码(Cordova SDK应用程序项目)和可选的配置设置编译项目,类似于PhoneGap的Build。在幕后我尝试使用xcodebuild
命令创建最终的IPA并将其返回给用户。所有使用Cordova开发的项目都准备使用XCode编译,并使用以下命令:
cordova platform add ios
cordova prepare ios
问题在于xcodebuild
需要项目的方案,根据我对该主题的搜索仅在您使用XCode GUI打开项目时生成。
有没有办法只使用命令行工具为项目生成方案?每个项目的方案是否相同,所以我可以将静态方案复制到我想要编译的每个项目中?
我并不是真正的XCode家伙或Mac家伙,所以我很乐意清楚解释解决方案的工作方式和原因,如果有的话...
修改
只是为了澄清我的最终意图:
当我使用XCode GUI打开项目(双击.xcodeproj)时,它会生成方案,然后我可以成功使用xcodebuild
命令而没有任何问题。但是我需要这个系统完全自动化,以便用户可以上传他使用Cordova框架构建的项目,如果他选择的话,让这个系统为他生成IPA。 (他还可以选择Cordova框架支持的其他平台)。就像PhoneGap最终的构建一样。
答案 0 :(得分:2)
您可以使用构建钩子脚本以编程方式生成方案,Cordova CLI将在构建iOS之前运行该脚本。我在这篇here上写了一篇博文,但这里有一个摘要:
我选择使用xcodeproj Ruby gem,你可以用:
sudo gem install xcodeproj
然后创建一个钩子脚本" fix_xcode_schemes.rb"在Cordova项目的hooks文件夹中,将其设置为755文件权限,以便它可执行并将其放在脚本中:
#!/usr/bin/env ruby
require 'xcodeproj'
xcproj = Xcodeproj::Project.open("platforms/ios/schemedemo.xcodeproj")
xcproj.recreate_user_schemes
xcproj.save
调整平台/ ios / schemedemo.xcodeproj以匹配您的项目名称。
然后运行脚本编辑项目的config.xml并添加:
<platform name="ios">
<hook type="after_platform_add" src="hooks/fix_xcode_schemes.rb" />
...
</platform>
我链接到的博客文章中的完整代码和Github。这里我使用了after_platform_add,因此Cordova CLI将在添加iOS平台后添加方案。对于现有项目,如果您不想删除并重新添加ios平台以使用我的原始示例,则可能需要将此交换为before_prepare或before_build以添加方案。 Cordova Hook文档是here。