代码之家  ›  专栏  ›  技术社区  ›  Sandeep Bhandari

这是用嵌入式可可豆创建动态/嵌入式框架的正确方法吗?

  •  2
  • Sandeep Bhandari  · 技术社区  · 8 年前

    我试图创建一个动态框架,在我的应用程序的各种扩展之间共享代码。

    这是我的项目结构。

    enter image description here

    MyFrameworks是我应用程序的一个网络层,它固有地使用Alamofire。因此,我的pod文件结构如下。

    platform :ios, '9.0'
    use_frameworks!
    
    workspace 'CocoaPodsProjectworkspace'
    
    def shared_pods
        pod 'Alamofire'
        pod 'SwiftyJSON'
    end
    
    target 'CocoaPodsProject' do
        project 'CocoaPodsProject.xcodeproj'
        # Pods for CocoaPodsProject
    end
    
    target 'MyFramework' do
        project 'MyFramework/MyFramework.xcodeproj'
        shared_pods
    end
    
    target 'CocoaPodsProjectTests' do
    
    end
    
    target 'CocoaPodsProjectUITests' do
    
    end
    

    在构建框架时,当我将其作为嵌入式二进制文件拖动到我的主项目时,我得到了错误。

    /Users/sandeep/Library/Developer/Xcode/DerivedData/cocoapodsprrojectworkspace enpobdyluhbxdwazuvfogcsfof/Build/Products/Debug iphonesimulator/MyFramework.framework/MyFramework

    我尝试过的解决方案:

    • 二进制文件。
    • 删除派生数据和重新链接框架都会导致相同的结果 问题

    有效的解决方案:

    platform :ios, '9.0'
    use_frameworks!
    
    workspace 'CocoaPodsProjectworkspace'
    
    def shared_pods
        pod 'Alamofire'
        pod 'SwiftyJSON'
    end
    
    target 'CocoaPodsProject' do
        project 'CocoaPodsProject.xcodeproj'
        shared_pods
        # Pods for CocoaPodsProject
    end
    
    target 'MyFramework' do
        project 'MyFramework/MyFramework.xcodeproj'
        shared_pods
    end
    
    target 'CocoaPodsProjectTests' do
    
    end
    
    target 'CocoaPodsProjectUITests' do
    
    end 
    

    我已经就CocoaPods Git回购提出了同样的问题。但由于这不是一个固有的问题,他们可能不会回头。因此将其作为一个问题发布在这里。问题链接: https://github.com/CocoaPods/CocoaPods/issues/6901 如果有帮助的话。

    1 回复  |  直到 8 年前
        1
  •  6
  •   Sandeep Bhandari    8 年前

    通过为我的自定义框架创建一个cocoa pod并使用cocoa pods依赖项解决了这个问题。

    • 从项目中删除了MyFramework(作为子项添加
    • pod deintegrate (将已添加的pod反集成到
    • 现在,该项目是干净的,没有添加任何pod 通过运行初始化pod pod init

    步骤2:为我的框架创建一个Pod

    • MyFramework的根文件夹运行 pod spec create MyFramework
    • 这将创建一个名为MyFramework的文件。中的podspec MyFramework的根文件夹。打开MyFramework。podspec使用任何 https://www.raywenderlich.com/126365/ios-frameworks-tutorial

    • 本教程中没有的最重要的步骤是如何添加 这是最简单的部分。就我而言,我需要 SwiftyJSON Alamofire 所以在我添加的podspec文件中,

    s、 依赖关系“Alamofire”

    s、 依赖项“SwiftyJSON”

    第3步:

    • Podfile 并如图所示进行更新 在下面
    target 'CocoaPodsProject' do
      use_frameworks!
      pod 'TestFramework', :path => 'TestFramework/'
    end
    

    它所做的是,它告诉主项目添加TestFramework作为依赖项,并将TestFramework安装在主项目的Framework文件夹中。因为TestFramework本身依赖于 阿拉莫菲尔 迅捷JSON 当你跑步时 pod install 阿拉莫菲尔 但也安装了 迅捷JSON TestFramework's 框架文件夹。

    阿拉莫菲尔 并且主/专利项目可以访问 TestFramework

    如果您现在想更新TestFramework代码,在完成开发之前,将其作为子项目添加到主项目中(这是必要的,因为如果您打开TestFramework.xcproj,您将看不到Alamofire/Swifty JSON。您必须打开父项目的工作区本身,因此才可以使用此解决方案)。一旦你完成了开发,如果你决定删除TestFramework作为子项目,你可以这样做:)

    target 'CocoaPodsProject' do
      use_frameworks!
      pod 'TestFramework', :path => 'TestFramework/'
    end
    
    target 'CocoapodsToday' do
      use_frameworks!
      pod 'TestFramework', :path => 'TestFramework/'
    end
    

    推荐文章