我想在Xcode中构建同一个应用程序的2个版本,一个带有,而一个没有Sparkle框架。我不想保持一个单独的目标。相反,我想使用2个独立的方案,这些方案依赖于2个独立的构建配置(总共4个,因为我将使用一个用于调试构建,一个用于发布构建)。
问题在于'复制捆绑资源'和“Link Binary”#39; '构建阶段'中的步骤对于给定目标上的所有方案都是一样的,据我所知。
所以我唯一的选择就是在构建之后(和签名之前)运行脚本:
ottol -L
一起列出)。有什么建议吗?
答案 0 :(得分:1)
经过相当多的工作后,我想出了一个解决方案。
为Debug和Release创建单独的构建配置,例如叫做'Debug-no_sparkle'和'发布 - no_sparkle',通过转到项目设置,在'信息'在'配置'标签。还可以通过“方案”创建相应的方案。弹出菜单,复制您的正常方案,然后使用' no_sparkle'该计划的各种行动中的配置。
添加'运行脚本'步骤到目标设置中的构建阶段。
这是我使用的Ruby脚本:
config = ENV['CONFIGURATION']
if (config =~ /no_sparkle/)
$stderr.puts "Removing Sparkle Framework"
sparkle_path = "#{ENV['BUILT_PRODUCTS_DIR']}/#{ENV['FRAMEWORKS_FOLDER_PATH']}/Sparkle.framework"
`rm -Rf "#{sparkle_path}"`
$stderr.puts "Removing Sparkle Framework linking"
binary_path = "#{ENV['BUILT_PRODUCTS_DIR']}/#{ENV['EXECUTABLE_PATH']}"
`install_name_tool -change @rpath/Sparkle.framework/Versions/A/Sparkle @rpath/ "#{binary_path}"`
end
我不能做的一件事是用install_name_tool
完全删除与框架链接相对应的行。我只能把它改成' /'删除它的任何痕迹,所以如果框架以某种方式可访问它甚至不会意外加载。能够完全删除它会很好。