【问题标题】:organizing xcode 4.0 copy bundle resources组织 xcode 4.0 复制包资源
【发布时间】:2010-12-23 22:28:01
【问题描述】:

在 xcode 4.0 中是否有一种简单的方法来组织 Copy Bundle Resources 中的文件?我的项目有多个目标,每次添加文件时,大多数时候我都需要将它们添加到每个项目中。当我错误地忘记将资源复制到每个目标时,如果我有一个简单的方法来控制自己,那将有很大帮助(除了查看包中的文件数,这最终会与每个项目的相同) )。

如果我可以在资源列表中创建文件夹会容易得多,但似乎我做不到。至少如果我可以自动按字母顺序排列它们可能会有所帮助。

【问题讨论】:

    标签: xcode resources bundle


    【解决方案1】:

    你要做的是解析 .pbxproj 文件。 .pbxproj 中的所有链接文件和资源均通过其自己的 UUID 进行标识。所以,

    1. 获取rootObject的UUID
    2. rootObjects 获取目标 UUID 列表
    3. 为每个目标获取ResourceSourceFramework 的UUID 列表。和 查找所有三种资源类型的文件 UUID 列表
    4. 比较每个目标的资源列表。

    一些提示, 工程文件的格式是这样的,rootObject引用其他对象。

    {
        archiveVersion = 1;
        classes = {
        };
        objectVersion = 45;
        objects = {
             /* .... List of all objects are here .... */
            }
        rootObject = 29B97313FDCFA39411CA2CEA /* Project object */;
    }
    

    从 rootObject 我们可以遵循 targets 值。

    /* Begin PBXProject section */
            29B97313FDCFA39411CA2CEA /* Project object */ = {
                isa = PBXProject;
                buildConfigurationList = C01FCF4E08A954540054247B /* Build configuration list for PBXProject "MyProject" */;
                compatibilityVersion = "Xcode 3.1";
                developmentRegion = English;
                hasScannedForEncodings = 1;
                knownRegions = (
                    English,
                    German,
                    de,
                );
                mainGroup = 29B97314FDCFA39411CA2CEA /* CustomTemplate */;
                projectDirPath = "";
                projectRoot = "";
                targets = (
                    1D6058900D05DD3D006BFB54 /* TargetDebug */,
                    C446CDCB12BA35A1001324C8 /* TargetAdHoc */,
                    C446CF2D12BA3DDC001324C8 /* TargetAppStore */,
                );
            };
    /* End PBXProject section */
    

    在项目文件的目标部分中,buildPhases 包含指向复制的捆绑资源列表和链接的链接。

        /* Begin PBXNativeTarget section */
                1D6058900D05DD3D006BFB54 /* TargetAdHoc */ = {
                    isa = PBXNativeTarget;
                    buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "TargetAdHoc" */;
                    buildPhases = (
                        1D60588D0D05DD3D006BFB54 /* Resources */,
                        1D60588E0D05DD3D006BFB54 /* Sources */,
                        1D60588F0D05DD3D006BFB54 /* Frameworks */,
                    );
                    buildRules = (
                    );
                    dependencies = (
                    );
                    name = TargetAdHoc;
                    productName = MyProject;
                    productReference = 1D6058910D05DD3D006BFB54 /* MyProject.app */;
                    productType = "com.apple.product-type.application";
                };
    
    
    C446CDCC12BA35A1001324C8 /* Resources */ = {
                isa = PBXResourcesBuildPhase;
                buildActionMask = 2147483647;
                files = (
                    C446CDCD12BA35A1001324C8 /* MainWindow.xib in Resources */,
                        /* ....... list of all PNGs and XIB files..... */
                                81CDEBBF13B21B790067A088 /* AnImage.png in Resources */,
                );
                runOnlyForDeploymentPostprocessing = 0;
            };
    

    【讨论】:

      【解决方案2】:

      (在 Xcode 3.2.x 上):您可以 alphabetize the files 选择阶段,然后选择阶段,然后编辑 -> 排序 -> 按名称。
      至于将它们分解为“文件夹”——没有什么能阻止您进行多个复制阶段!你甚至可以给每一个一个描述性的名字。

      【讨论】:

      • 谢谢,但是自从发布此内容后我升级到 xcode 4 并没有看到任何此类选择。我将更新问题以说明这一点。
      • 为此打开 Apple 错误报告并不是一个坏主意。
      【解决方案3】:

      不知道它在这种情况下是否有帮助,但在 Xcode 中,当您选择一个文件并获取它的信息(命令-I)时,其中一个选项卡是“目标”。从那里,您可以选择您希望文件成为其中一部分的所有目标。我相信对于非编译文件,它只是将文件添加到所选目标的 Copy Bundle Resources 阶段。

      【讨论】:

        【解决方案4】:

        您的资源组中可以有文件夹。只需将一个真正的 finder 文件夹拖到 xcode 中,然后选择“为添加的文件夹创建文件夹引用”,然后选择您要使用的所有目标。

        这将创建一个动态文件夹引用,它将自动添加该文件夹中的所有文件,而无需您每次都单独添加文件。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-01-19
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-05-31
          • 2018-03-11
          相关资源
          最近更新 更多