Tag: App Icon

为什么Cocoapods吃应用程序图标

大型应用程序需要团队合作,因此将其分为不同的组件。 在这种情况下,每个团队都将其中一个作为单个回购协议,并使用Cocoapods将它们链接并绑定在一起。 一切正常,直到我们点击主页按钮并发现我们的应用程序图标丢失。 让我们退后一步,看看我们如何处理每个组件的图像资产。 通常,我们将图像文件放在.xcassets文件夹中,以避免与其他模块中的图像重复或名称冲突。 .xcassets那些图像将添加到捆绑中,如下所示: 这样,可以正确加载每个图像,并且我们的UI看起来不错。 那为什么我们会错过App图标呢? 原因是在“ 复制捆绑资源”构建步骤中,Xcode对.xcassets使用–app-icon参数,这意味着我们在此步骤中具有应用程序图标。 下一步“ [CP] Copy Pods Resources ”时,缺少此参数,因此将删除应用程序图标。 此配置将覆盖最终的Assets.car并导致应用图标丢失。 解决该问题的方法是在Pods-your_project_name-resources.sh中添加–app-icon参数,以确保它可以在“ [CP]复制Pods资源 ”步骤中工作。 积分属于Tima Khomutnikov。 另一种解决方案是将所有图像文件而不是.xcassets目录放入捆绑包。 它肯定会工作,但不是上一个的最佳选择。 有关更多详细信息,您可以在此处参考Cocoapods问题。

Xcode:应用程序图标怎么了?

在Xcode中创建图像集时,很容易为每个比例因子自动填充孔。 您只需要为三个比例因子图像文件提供正确的语法即可,例如: image.png image_2x.png image_3x.png 拖入它们,Xcode会自动为每张图像检测正确的孔,然后tada! 因此,您认为在资产目录中设置应用程序图标同样容易。 那里有一些自动化,但是很奇怪,这有点麻烦。 让我们看一下我们可以做些什么。 生成应用程序图标文件 首先,如何设置所有这些版本的应用程序图标? 简单! Apple在HIG的资源部分中提供了Photoshop(或Sketch或Adobe XD)模板,用于设置图标,看起来像: 设置图标后,可以指定“文件”>“生成”>“图像资产”: 这将输出创建应用程序图标所需的所有文件: 将图标添加到资产目录 但是,正如我们所看到的,当您将这些图标拖到您的应用程序图标中时: 只有一些孔填充,其他孔保持空白,而某些文件被视为未分配: 您的第一个问题可能是: 我的猜测是这是Xcode中的错误。 如果有人对此有更多信息,请随时在此处添加评论。 但是也许一个更相关的问题是…… 怎么办呢? 手动修复 因此,一种解决方案当然是手动解决此问题。 我们可以将文件一一拖到正确的孔中。 无聊! 我们要自动化! 修复自动化 因此,如果右键单击资产目录中的应用程序图标,然后选择“在Finder中显示”: 在这里,您将找到项目内的所有图标文件,以及一个“ Contents.json”文件: 这就是魔术的住所! Contents.json是资产目录用来描述其资产(或文件夹,元数据等)的文件。如果打开AppIcon的Contents.json文件,您会发现它描述了所有应用程序图标文件,空白孔和未分配的图像,如下所示: 我们需要的所有文件都在Asset Catalog的App Icon文件夹中,我们只需要在Contents.json文件中正确分配它们即可。 如果我们使用了Photoshop模板,则我们的文件每次都将具有相同的名称,因此我们可以简单地将Contents.json替换为标准的Contents.json文件,该文件已设置了正确的文件描述以及所有内容应该会自动掉入正确的井中! 因此,作为回顾,以下是从Photoshop生成图标文件后要遵循的步骤: 选择所有生成的文件( Icon-App-60×60@1x.png 除外 ,该文件不再包含在应用程序图标包中),然后将它们照常拖到Assets Catalog中的“应用程序图标”中在Xcode中。 右键单击“应用程序图标”,然后选择“在Finder中显示” 。 在这里,您将找到Contents.json文件。 用更正的Contents.json文件替换此Contents.json文件。 (您可以在这里找到此文件的要点。) 多田! 有一个应用程序! 或者,您可以尝试第三方解决方案。 但是请注意,有很多(甚至是付费的Mac程序)仅为您创建文件(正是Photoshop模板为您提供的功能),而没有帮助您将这些文件集成到Xcode中。 Icon […]

动态更改应用程序图标

自iOS 10.3起,Apple推出了一项很酷的功能,以便开发人员能够以编程方式更改应用程序图标。 尽管它不像带有运行时钟的官方Clock应用程序那么灵活,但我们仍然可以基于它来享受巨大的活力。 让我们看看它是如何工作的。 背后的理论 在Apple的API文档中,有三件事值得一看: var supportsAlternateIcons: Bool { get } var alternateIconName: String? { get } func setAlternateIconName(String?, completionHandler: ((Error?) -> Void)? = nil) supportsAlternateIcons是一个只读属性,它决定应用程序是否可以更改其图标。 为了实现它,我们需要在info.plist文件中设置替代图标,我们将在后面讨论。 AlternativeIconName也是一个只读属性,它是当前显示的替代应用程序图标的名称。 请注意,当应用程序显示其主要图标时,它为nil。 setAlternateIconName是用于设置要显示的图标的功能。 如果我们将图标名称设置为nil,则该应用将显示其主要图标。 有关更多详细信息,您可以参考Apple的官方API页面。 由于我们了解如何执行此操作,因此让我们进入Xcode并开始。 先决条件 首先,让我们为应用程序图标放置3张图像,分别是“ pichu.png”,“ pikachu.png”和“ raichu.png”。 请注意,如果将图标图像放在Assets目录下,则正确的位置在project目录下是没有用的 。 这是我的截图: 接下来,我们需要设置Info.plist。 将图标文件(iOS 5)添加到信息属性列表 将CFBundleAlternateIcons添加为字典,用于替代图标 在CFBundleAlternateIcons下设置3个字典,它们对应于“ pichu”,“ pikachua”和“ raichu” 对于每个字典,需要配置两个属性-UIPrerenderedIcon和CFBundleIconFiles 有关更多详细信息,您可以参考Apple的Core Foundation Keys页面。 这是我的info.plist的屏幕截图: […]