我想在Xcode中构建同一应用程序的2个版本,其中一个版本包含Sparkle框架,一个版本不包含Sparkle框架。我不想维护一个单独的目标。相反,我想使用2个独立的方案,这些方案依赖于2个单独的构建配置(嗯,总共4个,因为我将在调试构建中使用一种,而在发布构建中使用一种)。
问题是,据我所知,对于给定目标上的所有方案,“构建阶段”中的“复制捆绑包资源”和“链接二进制文件”步骤都是相同的。
因此,我所看到的唯一选择是在构建后(以及签名之前)运行脚本,该脚本将:
ottol -L
)。有什么建议么?
经过大量的工作,我想出了一个解决方案。
通过转到“配置”选项卡中“信息”下的项目设置,为Debug和Release创建单独的构建配置,例如称为“ Debug-no_sparkle”和“ Release-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
。我只能将其更改为“ /”以删除其任何痕迹,因此,即使可以通过某种方式访问该框架,它也不会意外加载。能够将其完全删除会很好。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句