And*_*rew 51 scripting xcode project
现在我正在使用一些脚本来生成我在Xcode中作为资源包含的文件.问题是我正在运行脚本,然后从项目中删除,然后重新添加到项目中.必须有一种方法可以自动完成最后一步,这样脚本就可以生成文件并自动将它们添加到xcode项目中.
我正在使用bash,但任何语言示例都会有所帮助.
谢谢,安德鲁
Ben*_*ran 37
我和安德鲁有类似的需求.我需要能够在不知道这些资源的情况下从脚本中包含资源.这是我提出的解决方案:
在包含以下命令的"复制包资源"之后添加新的运行脚本构建阶段:
find -L ${SRCROOT}/SomeDerivedResources \
-type f -not -name ".*" \
-not -name "`basename ${INFOPLIST_FILE}`" \
| xargs -t -I {} \
cp {} ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/
Run Code Online (Sandbox Code Playgroud)
看起来很可怕,但让我们分解一下:
find -L ${SRCROOT}/SomeDerivedResources
Run Code Online (Sandbox Code Playgroud)
这会在源根目录中抓取目录SomeDerivedResources(-L告诉它遵循符号链接)
-type f
Run Code Online (Sandbox Code Playgroud)
仅包含常规文件
-not -name ".*"
Run Code Online (Sandbox Code Playgroud)
忽略以点开头的文件
-not -name "`basename ${INFOPLIST_FILE}`"
Run Code Online (Sandbox Code Playgroud)
就我而言,我的Info plists存在于SomeDerivedResources目录中,因此我们需要将该文件排除在复制到我们的产品之外
| xargs -t -I {}
Run Code Online (Sandbox Code Playgroud)
管的结果find为xargs具有-t(回声导致命令标准错误,使他们出现在我们构建的日志), -I(一次为每个输入文件运行命令),并使用{}作为我们的参数的占位符
cp {} ${CONFIGURATION_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/
Run Code Online (Sandbox Code Playgroud)
最后,将每个找到的文件(表示为{})复制到我们产品的资源目录中.
我在输入时意识到使用rsync设置而不是cp可能会阻止我们在每次构建时复制资源.如果您的资源非常庞大,那么可能值得一试.
(此外,由于一些原因,文件夹引用不适用于我的需要.一,我的图标在我的DerivedResources目录中并且将它们放在包中的子目录中似乎不起作用.另外,我理想地希望能够使用[UIImage imageNamed:@"MyAwesomeHappyImage.png"]和-pathForResource:ofType:(我的一些文件在DerivedResources目录中进一步嵌套).如果你的需求不包含这些限制,我强烈建议你去文件夹引用路径.)
e.J*_*mes 33
这可以通过向应用程序添加新的构建阶段来完成.
在Xcode项目浏览器中,找到应用程序的目标,然后展开它以显示所有构建阶段.
向目标添加新的"运行脚本"构建阶段.最简单的方法是右键单击目标并选择"添加/新建构阶段/新建运行脚本构建阶段"
添加新构建阶段应该会打开一个检查器窗口.在此窗口中,您可以输入整个shell脚本,或只是输入命令行来运行脚本.
这是黄金:在检查器窗口的底部,您可以指定输入文件和输出文件.指定输入文件会自动设置依赖项(只有在修改了某些输入文件时才会执行shell脚本).指定输出文件会自动将依赖项传播到这些文件.运行shell脚本时,Xcode知道它需要处理shell脚本已修改的那些文件.
请务必将新构建阶段拖到阶段列表的顶部,如下面的屏幕截图所示.如果您需要将这些资源文件包含在捆绑包中,那么订单将非常重要.
保存,构建,提交到存储库,要求加薪,享受新鲜空气,度过美好的一天!:)
基本上,只需要将文件复制到主包中
在这种情况下,只需向项目添加一个文件夹引用(在项目文件夹中创建一个文件夹,然后将其拖到项目"资源"组中(在"文件和组"列表中;然后在出现的工作表中选择"创建")任何添加的文件夹"单选按钮"和Xcode的文件夹引用将在构建时将文件夹及其所有内容复制到目标包中.
只需另外注意:如果使用此方法添加图像子文件夹,则必须在图像名称前加上子文件夹名称,以使用'[UIImage imageNamed:]'.例如,如果您在名为"MyImages"的子文件夹中有一个名为"Rendezvous.png"的图像:
`
// this won't work
UIImage * image = [UIImage imageNamed:@"Rendezvous"];
if (image) {
NSLog(@"Found Rendezvous!");
} else {
NSLog(@"Didn't find Rendezvous.");
}
// but this will!
image = [UIImage imageNamed:@"MyImages/Rendezvous"];
if (image) {
NSLog(@"Found MyImages/Rendezvous!");
} else {
NSLog(@"Didn't find MyImages/Rendezvous.");
}
Run Code Online (Sandbox Code Playgroud)
`
| 归档时间: |
|
| 查看次数: |
31570 次 |
| 最近记录: |