Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用弱链接CocoaPods库构建iOS框架_Ios_Iphone_Frameworks_Cocoapods_Weak Linking - Fatal编程技术网

如何使用弱链接CocoaPods库构建iOS框架

如何使用弱链接CocoaPods库构建iOS框架,ios,iphone,frameworks,cocoapods,weak-linking,Ios,Iphone,Frameworks,Cocoapods,Weak Linking,我正在尝试使用Xcode 6提供的用于创建Cocoa Touch框架的新模板构建一个iOS框架(Test.Framework)。 该框架在Podfile中指定了不同的依赖项(如AFNetworking或FacebookSDK)。我不想在框架中包含依赖项,我只想链接它们 问题是,当我构建框架时,libPods.a是链接和包含的。 Q:如何链接libPods.a库,但不将其包含在框架中? 更多详细信息: 我读过关于弱链接的文章: 但我没有太多的项目设置经验,我不是专业人士 我尝试将libPods.

我正在尝试使用Xcode 6提供的用于创建Cocoa Touch框架的新模板构建一个iOS框架(Test.Framework)。 该框架在Podfile中指定了不同的依赖项(如AFNetworking或FacebookSDK)。我不想在框架中包含依赖项,我只想链接它们

问题是,当我构建框架时,libPods.a是链接和包含的。 Q:如何链接libPods.a库,但不将其包含在框架中?


更多详细信息:

我读过关于弱链接的文章: 但我没有太多的项目设置经验,我不是专业人士

我尝试将libPods.a标记为“可选”,但没有任何改变,依赖项仍然包含在内

在构建阶段,我尝试从“链接二进制文件与库”部分删除libPods.a,但出现了以下错误(在清理项目文件夹并再次构建之后):

我尝试从“其他链接器标志”中删除所有标志,但它给了我未定义的符号:

Undefined symbols for architecture armv7:
  "_OBJC_CLASS_$_FBSession", referenced from:
      objc-class-ref in TestClass.o
ld: symbol(s) not found for architecture armv7
以下是包含库的干净项目的源代码:
我还不能发表评论,所以我将在这里回答。 我想你不能那样做。CoCoapod创建一个静态库而不是动态库,因此编译时所有代码都应该在那里,并嵌入到框架中

,请转到“幕后发生了什么?”了解详细说明


如果您想为一些常用的pod组合一些基本配置,那么最好的方法可能是制作一个自定义cocoapod,并将其他pod作为依赖项。这样,您就可以依靠cocoapods来管理版本,并根据您的偏好更新代码。我自己也在使用类似的方法,我对结果非常满意。

下面的安装后代码位于播客文件的底部。它允许您指定想要的目标以及弱链接的框架。我们可以利用这一点来削弱动态框架目标中的框架,但在编译核心应用程序时继续将其正确链接

targets_to_weaklink=['Target1']
frameworks_to_weaklink=['Framework1']
post_install do |installer|
  targets_to_weaklink.map!{|t| t="Pods-#{t}"}
  installer.pods_project.targets.each do |target|
    next unless targets_to_weaklink.include?(target.name)

    target.build_configurations.each do |config|
      base_config_reference = config.base_configuration_reference
      unless base_config_reference.nil?
        xcconfig_path = base_config_reference.real_path
        xcconfig = File.read(xcconfig_path)
        frameworks_to_weaklink.each do |framework|
          xcconfig = xcconfig.gsub(/-framework "#{framework}"/, "-weak_framework \"#{framework}\"")
        end
        File.open(xcconfig_path, "w") { |file| file << xcconfig }
      end
    end
  end
end
targets_to_weakink=['Target1']
框架_to_weaklink=['Framework1']
安装后的do安装程序|
目标是弱者。地图!{t|t=“Pods-{t}”
installer.pods_project.targets.each do| target|
下一步除非目标是弱者。包括?(target.name)
target.build|u configurations.each do| config|
base\u config\u reference=config.base\u configuration\u reference
除非base_config_reference.nil?
xcconfig\u path=base\u config\u reference.real\u path
xcconfig=File.read(xcconfig\u路径)
框架到弱者。每个人都做框架|
xcconfig=xcconfig.gsub(/-framework“#{framework}”/“-weak#u framework\”#{framework}\”)
结束
open(xcconfig_path,“w”){| File | File有人知道cocoapods中的“-弱框架”是什么吗?
targets_to_weaklink=['Target1']
frameworks_to_weaklink=['Framework1']
post_install do |installer|
  targets_to_weaklink.map!{|t| t="Pods-#{t}"}
  installer.pods_project.targets.each do |target|
    next unless targets_to_weaklink.include?(target.name)

    target.build_configurations.each do |config|
      base_config_reference = config.base_configuration_reference
      unless base_config_reference.nil?
        xcconfig_path = base_config_reference.real_path
        xcconfig = File.read(xcconfig_path)
        frameworks_to_weaklink.each do |framework|
          xcconfig = xcconfig.gsub(/-framework "#{framework}"/, "-weak_framework \"#{framework}\"")
        end
        File.open(xcconfig_path, "w") { |file| file << xcconfig }
      end
    end
  end
end