测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可 | MIT |
Released上次发布 | 2016年11月 |
由Ellen Shapiro,Brock Boland维护。
Cat2Cat
存在是为了帮助解决 UIImage 的 imageNamed:
方法中的拼写错误问题。
没有 Cat2Cat
,您可能只能困扰于您的名为 backgroundImage
的背景图像在哪里,最终只能发现您意外设置了一个 [UIImage imageNamed:@"backrgoundImage"];
调用。
随着 Xcode 5 中资产目录的出现,迈出了正确方向的一大步 - 图像不再与它们的文件名相关联,并且可以轻松集中管理您的图像资产。
但是,那个令人讨厌的拼写错误问题仍然存在。直到现在。
Cat2Cat
会遍历提供的 Asset Catalog 文件,并将其内容写入到 UIImage+AssetCatalog 或 NSImage+AssetCatalog 类别 - 资产目录中的每个 .imageset
将获得自己的方法调用,方法名为 ac_
表示该方法来自资产目录,并有助于防止任何命名空间冲突。
运行 Cat2Cat
并添加其生成的类别或类别后,您现在可以调用 [UIImage imageNamed:@"backgroundImage"]
,而不是调用 [UIImage ac_backgroundImage]
,这样可以确保您总是得到您预期的图像,并在您试图回忆该图标叫什么名字时提供自动完成功能。
Cat2Cat
与可以利用 Asset Catalogs 的 Xcode 5 项目兼容(即 iOS 6 及以上版本)。
注意:由于子模块如何处理包含重音符号的测试文件名存在一些问题,因此不应将 Cat2Cat 作为 Git 子模块使用。如果您想通过依赖管理而不是手动来关注版本,请使用我们的 CocoaPod,它不包含任何测试项目。
最新编译的二进制文件可以从发行页面下载。
usage: Cat2Cat [options]
-p, --base-path Base path used for interpreting the asset catalogs and output directory
-a, --asset-catalog Asset catalog(s)
-o, --output-dir Output directory
--objc Output Objective-C category or categories
--swift Output Swift class extension(s)
--ios Output for iOS (UIImage)
--osx Output for OS X (NSImage)
-h, --help Show this message
示例
Cat2Cat --base-path="/Users/YourName/Desktop/YourProjectFolder" --asset-catalog="Resources/Images.xcassets" --asset-catalog="Resources/Media.xcassets" --output-dir="Categories" --objc --ios --osx
Cat2Cat --swift --ios \
--base-path="/Users/YourName/Desktop/YourProjectFolder" \
--asset-catalog="Resources/*.xcassets" \
--output-dir="Categories"
请参考iOS 示例应用的 Cat2Cat
聚合构建目标,其中包含适用于 iOS 的适当运行脚本,以及Mac 示例应用的 Cat2Cat
聚合构建目标,其中包含适用于 Mac 的适当运行脚本。
使用右侧的便捷链接下载本仓库的 zip 文件。打开 .xcodeproj,选择默认构建方案,然后选择编辑方案...
在“参数”部分,向构建方案添加五个(或更多)在启动时传递的参数
--base-path="/Users/您的名字/Desktop/您的项目文件夹"
--asset-catalog="Resources/Images.xcassets"
--asset-catalog="Resources/Media.xcassets"
--output-dir="Categories"
--objc
--swift
UIImage
)或OS X(NSImage
),或两者都生成--ios
--osx
添加您的启动参数后,构建并运行应用程序。您的新类别或类别应输出到您提供的文件路径。
Asset Catalog中包含无效方法名称字符(除a-z,A-Z,0-9和下划线之外的所有字符)的任何图像名称,将在方法签名中将这些字符替换为下划线。例如,"AssetName"将成为ac_AssetName
,"Asset Name"将成为ac_Asset_Name
。
相关地,包含重音符号或其他装饰的图像名称中的字符通常只有不带重音的字母然后是一个下划线。例如,您的资源目录中名为"Fiancée Photo"的图像将变成ac_Fiance_e_Photo
。
您第一次运行此应用程序时,需要将类别文件拖到项目中,以便项目可以看到这些文件。在后续运行中,您将能够立即看到更改,因为Xcode已经了解这些更改。
第一次运行Cat2Cat
之后,它将完全替换文件内容,而不仅仅是更新更改的部分。因此,您不应对这些文件进行任何手动更改。
如果您在相同的资源目录或不同的资源目录中具有相同名称的多个图像,则在尝试编译使用UIImage+AssetCatalog
或NSImage+AssetCatalog
的项目时,编译器将给出“方法声明重复”警告。
XcodeAutoBasher可用于在您更改资源目录中的任何内容时自动运行脚本以使用Cat2Cat。
由于iOS中不直接支持UIImage
的imageNamed:
方案,因此不支持iOS上的.launchimage
,.iconset
和.appiconset
文件夹。如果您需要在应用程序中使用应用程序图标或启动图像,请将其添加为标准.imageset
。
在OS X上,.iconset
和.appiconset
确实返回图像,但它们似乎只有一个大小。非常乐意从Mac开发者那里了解,如果想要访问应用程序图标,这种行为是否符合预期。目前已添加了对现在返回内容的支持。