【问题标题】:Embedding a framework within a framework (iOS 8+)在框架中嵌入框架(iOS 8+)
【发布时间】:2015-03-08 05:28:49
【问题描述】:

使用 Xcode 6 或更高版本构建的 iOS 应用程序允许在其中嵌入动态 iOS 框架。我正在构建一个共享框架并想嵌入一个子框架。我怎样才能做到这一点?

注意:这是可能的,并且正在在生产中使用(例如,CocoaPods 中的 Swift 框架)。 p>

【问题讨论】:

    标签: ios xcode cocoa dynamic frameworks


    【解决方案1】:

    找到答案。以下是它的完成方式:

    • 导航到目标 > 构建阶段
    • 点击小“+”图标并选择“New Run Script Build Phase”
    • 粘贴以下内容:

      cd $BUILT_PRODUCTS_DIR
      
      mkdir $PROJECT_NAME.framework/Frameworks &>/dev/null
      
      for framework in *.framework; do
          if [ $framework != $PROJECT_NAME.framework ]; then
              cp -r $framework $PROJECT_NAME.framework/Frameworks/ &>/dev/null
          fi
      done
      

    【讨论】:

    • 这确实有效,但只是补充一点,嵌入子框架的框架被称为“伞形框架”,Apple 不鼓励这样做。请参阅此问题以了解为什么会出现这种情况的绝佳答案:stackoverflow.com/questions/7365578/… 你应该做什么:最好不要嵌入子框架,而是最好单独分发你的框架及其依赖项。
    • @JonathanEllis 这并不总是理想的。例如,我使用 WebP.framework 添加了 WebP 支持。我不希望我的主应用程序、照片编辑扩展程序和 iMessage 扩展程序都必须包含 WebP.framework 的单独副本。浪费空间...
    • @jjxtra 如果您将 WebP 构建为静态框架,那么是的,您通过链接 3 次来浪费空间。但是您不应该将其构建为您的用例的静态框架。动态框架只需要包含一次,所有其他消费者在运行时链接和解析库。你不需要一个伞式框架来获得这种行为——事实上,Apple 不鼓励它。
    【解决方案2】:

    @Vatsal Manot 的回答对我很有帮助。我对其进行了一些修改,并且还需要对复制的嵌入式框架进行签名。我的脚本在下面。

    cd $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/Custom.framework/Frameworks
    for framework in *.framework; do
        mv $framework $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/
        /usr/bin/codesign --force --sign "iPhone Developer" --preserve-metadata=identifier,entitlements --timestamp=none $BUILT_PRODUCTS_DIR/$PRODUCT_NAME.app/Frameworks/$framework
    done
    

    【讨论】:

      【解决方案3】:

      要创建包含子框架的 Umbrella 框架,您可以按照此处记录的分步指南进行操作:Umbrella framework

      【讨论】:

        猜你喜欢
        • 2016-07-25
        • 2015-08-26
        • 2014-12-04
        • 2022-07-28
        • 2019-05-18
        • 2015-01-17
        • 1970-01-01
        • 2014-11-23
        • 1970-01-01
        相关资源
        最近更新 更多