基于某些预处理器宏删除静态库

时间:2014-03-27 11:37:25

标签: iphone objective-c xcode

我有一个功能,它取决于一个静态库。实际上,Apple没有允许这个静态库,原因很少。所以,现在我们已经决定添加一个预处理器宏,并且基于该功能应该打开/关闭。

我已将代码切换为基于预处理器宏的行为。但我找不到任何基于预处理器宏链接或取消链接库。我不能允许随时链接库,因为我已经告诉苹果不允许它。

我已经知道的一个解决方案:我可以创建多个目标。但问题是我的应用程序已经有很多目标。所以,再次管理这个,我必须为已经创建的每个目标再创建一个目标。

任何帮助将不胜感激。

修改:

我已经创建了像Francesco建议的配置。但是我要说的一个简单的问题如果我将从“库搜索路径”中删除库的路径,那么该库将不会链接到应用程序?因为该库仍然是App的目标。

3 个答案:

答案 0 :(得分:3)

您可以创建多个配置,而不是目标。您可以在那里更改链接器标志。 我这样做是为了思考Sparkle框架(在App Store上不允许)

编辑:

要创建/管理配置,请单击侧栏中的项目。然后在主窗口中再次选择项目,而不是目标,并选择“信息”选项卡。

与部署目标选择和语言一起,您将找到“配置”部分。 您可以从那里添加或删除配置。 Project config

然后启动它你必须转到产品 - >方案 - >编辑方案 - >构建配置。 您可以复制现有方案并从那里选择正确的配置。

schemes

答案 1 :(得分:1)

您可以通过设置(有些未记录的)Xcode构建设置从链接项列表中删除静态库:

EXCLUDED_SOURCE_FILE_NAMES = libUnwanted.a

您可以在.xcconfig文件或普通目标构建设置UI中执行此操作(通过添加自定义构建设置)。例如,如果你在"发布"中设置它。配置Xcode将包含在" Debug"如果发布版本,则编译但省略。

EXCLUDED_SOURCE_FILE_NAMES适用于可添加到目标的各种文件:源文件,资源,库......

以下是如何逐步完成此操作:

  1. 通过单击Project Navigator中的蓝色项目图标打开目标构建设置,然后选择Build Settings选项卡。
  2. 点击加号图标,添加"用户自定义设置"
  3. 为设置命名" EXCLUDED_SOURCE_FILE_NAMES"
  4. 展开设置的配置并设置"发布"值为您不需要的库的名称。

答案 2 :(得分:1)

  

这个答案归功于Nikolai Ruhe&弗朗西斯

我结合了两者的答案,我得到了解决方案。

以下是我遵循的步骤。

  • 创建新配置。 (要知道如何创建配置,请参阅 Francesco的答案)

  • 在构建设置的用户定义设置中添加了标记EXCLUDED_SOURCE_FILE_NAMES。 (有关步骤,请参阅Nikolai Ruhe的答案)。在这个标志中,我在我的自定义配置下添加了静态库的名称。

这是一个很好的教程,肯定会帮助你:Remove tesflight from Distriubtion