Cat2Cat 3.0.0

Cat2Cat 3.0.0

测试已测试
Lang语言 Obj-CObjective C
许可 MIT
Released上次发布2016年11月

Ellen ShapiroBrock Boland维护。



Cat2Cat 3.0.0

  • Ellen Shapiro 和 Bryan Luby

Cat2Cat (目录转类别)


Cat2Cat 存在是为了帮助解决 UIImage 的 imageNamed: 方法中的拼写错误问题。

没有 Cat2Cat,您可能只能困扰于您的名为 backgroundImage 的背景图像在哪里,最终只能发现您意外设置了一个 [UIImage imageNamed:@"backrgoundImage"]; 调用。

随着 Xcode 5 中资产目录的出现,迈出了正确方向的一大步 - 图像不再与它们的文件名相关联,并且可以轻松集中管理您的图像资产。

但是,那个令人讨厌的拼写错误问题仍然存在。直到现在。

Cat2Cat 会遍历提供的 Asset Catalog 文件,并将其内容写入到 UIImage+AssetCatalogNSImage+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 的适当运行脚本。

直接从 Xcode 运行

使用右侧的便捷链接下载本仓库的 zip 文件。打开 .xcodeproj,选择默认构建方案,然后选择编辑方案...

在“参数”部分,向构建方案添加五个(或更多)在启动时传递的参数

  • 资源目录和生成的类别/扩展(例如,到项目的路径)的基本目录
    --base-path="/Users/您的名字/Desktop/您的项目文件夹"
  • 您项目中资源目录的路径,不含前面的斜杠(如果有多个资源目录,请多次添加)
    --asset-catalog="Resources/Images.xcassets"
    --asset-catalog="Resources/Media.xcassets"
  • 您希望将类别写入的项目的路径,不含前面的斜杠
    --output-dir="Categories"
  • 指示是否生成Objective-C类别/类别或Swift类扩展,或两者都生成
    --objc
    --swift
  • 指示是否为iOS(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+AssetCatalogNSImage+AssetCatalog的项目时,编译器将给出“方法声明重复”警告。

  • XcodeAutoBasher可用于在您更改资源目录中的任何内容时自动运行脚本以使用Cat2Cat。

限制


  • 由于iOS中不直接支持UIImageimageNamed:方案,因此不支持iOS上的.launchimage.iconset.appiconset文件夹。如果您需要在应用程序中使用应用程序图标或启动图像,请将其添加为标准.imageset

  • 在OS X上,.iconset.appiconset确实返回图像,但它们似乎只有一个大小。非常乐意从Mac开发者那里了解,如果想要访问应用程序图标,这种行为是否符合预期。目前已添加了对现在返回内容的支持。

贡献者