组织xcode 4.0复制捆绑资源

时间:2010-12-23 22:28:01

标签: xcode resources bundle

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

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

4 个答案:

答案 0 :(得分:3)

您需要做的是解析 .pbxproj 文件。 .pbxproj 中的所有关联文件和资源都是通过自己的 UUID 标识的。所以,

  1. 获取rootObject的UUID
  2. rootObject s
  3. 获取目标UUID列表
  4. 针对每个目标,获取ResourceSourceFramework的UUID列表。和 找到所有三种资源类型的文件列表UUID
  5. 比较每个目标的资源列表。
  6. 一些提示, 项目文件的格式是这样的, rootObject 引用其他对象。

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

    从rootObject我们可以遵循目标值。

    /* 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;
            };
    

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

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

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