代码之家  ›  专栏  ›  技术社区  ›  iOS.Lover

更改iPad的替代图标

  •  7
  • iOS.Lover  · 技术社区  · 6 年前

    我在iPad上更改应用程序图标时遇到问题。在iPhone上一切都正常,但在iPad上,我得到了这个错误:

    < Buff行情>

    [默认值]无法将PreferredIconName设置为ai Gorgosaurus …:0>错误:错误 domain=nscocoaerrordomain code=4“文件不存在。” userinfo=nsunderlyingerror=0x600000248a30错误 域=LsapplicationWorkspaceErrorDomain代码=-105“找不到IconName 在cfbundlealternateicons条目中“ userinfo=nsLocalizedDescription=iconname未在中找到 cfbundlealternateicons项应用程序图标因文件而失败 不存在。

    < /块引用>

    我搜索了广告,发现我需要在 cfbundleConfiles 中添加 ~ipad but still get the same error!

    代码如下:

    func changeicon(to name:string?){
    //检查应用程序是否支持交替图标
    guard uiapplication.shared.supportsalternateicons其他{
    返回;
    }
    
    //将图标更改为具有给定名称的特定图像
    中的uiapplication.shared.setAlternateIconName(name)(error)
    //应用图标更改后,打印错误或成功消息
    如果让误差=误差{
    print(“由于\(error.localizedDescription)”,应用程序图标失败)
    }否则{
    print(“应用程序图标更改成功。”)
    }
    }
    }
    < /代码> 
    
    

    我刚在另一个项目上测试过,工作得很好!!!!但不是我目前的项目,为什么?!你知道吗?

    我搜索广告发现我需要添加~ipad在里面CFBundleIconFiles但还是会有同样的错误!.

    代码如下:

      func changeIcon(to name: String?) {
            //Check if the app supports alternating icons
            guard UIApplication.shared.supportsAlternateIcons else {
                return;
            }
    
            //Change the icon to a specific image with given name
            UIApplication.shared.setAlternateIconName(name) { (error) in
                //After app icon changed, print our error or success message
                if let error = error {
                    print("App icon failed to due to \(error.localizedDescription)")
                } else {
                    print("App icon changed successfully.")
                }
            }
        }
    

    enter image description here

    我刚在另一个项目上进行了测试,效果很好!!!!但不是我目前的项目,为什么?!你知道吗?

    5 回复  |  直到 5 年前
        1
  •  2
  •   Dave Wood    5 年前

    你有:

    -cfbundleicons
    -cfbundlealternateicons公司
    -图标名称
    -cfbundle文件图标
    -cfbundlefilescons~ipad
    < /代码> 
    
    

    但应该是:

    -cfbundleicons
    -cfbundlealternateicons公司
    -图标名称
    -cfbundle文件图标
    -cfbundleicons~ipad公司
    -cfbundlealternateicons公司
    -图标名称
    < /代码> 
    
    

    基本上,一旦你让它使用iPhone图标,cfbundleicons,复制整个树作为cfbundleicons~ipad。iPad文件不应嵌套在cfbundleiconsat all.

    您混淆了cfbundleicons~ipadandcfbundleconfiles~ipad(which is not a valid key).

    但应该是:

    - CFBundleIcons
      - CFBundleAlternateIcons
        - Icon Name
          - CFBundleFilesIcons
    - CFBundleIcons~ipad
      - CFBundleAlternateIcons
        - Icon Name
         - CFBundleFilesIcons
    

    基本上,一旦你将它与iPhone图标一起使用,CFBundleIcons,将整个树复制为CFBundleIcons~ipad. iPad文件不应嵌套在CFBaseLigon完全。

    你搞混了cfbundleicons~ipad公司CFBundleIconFiles~ipad(不是有效密钥)。

    Screenshot

        2
  •  1
  •   Marcy    5 年前

    我注意到你的上唇 uiprerenderedicon设置为否

    把它改成是的

    可能是渲染有问题

    编辑1:添加.png扩展名以查看是否有帮助

    编辑2:尝试将新图标的文件名更改为ipadalternate.png。然后在plist中更改为相同的名称,因为它看起来与plist和图标文件本身存在某种不匹配。

    编辑3:您清理了DerivedData文件夹吗?前一段时间我遇到了一个问题,没有任何帮助,包括清理项目等。但是我尝试删除/users/yourusername/library/developer/xcode/deriveddata/文件夹中的所有内容,它又开始工作了。值得一试。

    编辑4:尝试执行编辑3中的步骤。然后重新启动项目并从中删除所有可选图标文件。选择“移动到垃圾箱”,然后选择“Cmd+shift+k”进行清理。然后选择Cmd+B进行构建。接下来将图标添加回原来的位置。检查目标选择是否正确,如果需要,请复制项目。出于某种原因,Xcode丢失了您的文件,它显示一个错误,没有文件。

    如果这不起作用,请尝试上述步骤。但首先尝试将整个项目移动到另一个文件夹。

    编辑5:还有一个想法你可以自己尝试。尝试删除当前项目中的plist文件(删除前保留该文件的备份副本),然后启动一个新项目,在该项目中图标更改工作正常。将该项目中的plist添加到此项目中。检查图标更改是否有效。如果是,则添加上一个项目中缺少的所有键。

    警告:这是最后的办法,但这可能有效。启动一个新项目,并用您想要交替使用的图标设置它。首先检查它们是否工作,然后添加项目中不工作的所有代码和依赖项。只是不要重写plist文件。

    编辑6:尝试从模拟器或您正在尝试的设备中删除应用程序,然后重新安装。整个问题可能与更新和应用程序早期版本的遗留问题有关。

    编辑7:尝试将项目复制到另一台Mac,看看问题是否仍然存在。您使用的是哪个Xcode版本??如果它是Xcode9,也许可以尝试使用Xcode10测试版。

        3
  •  1
  •   Rizwan Shaikh    5 年前

    请对plist文件进行这些更改,以便为iPhone和iPad设置备用图标。

    enter image description here

        4
  •  0
  •   iVarun    6 年前

    通过以下结构,我可以在iPad中更改图标:

    if available(iOS 10.3,*)。{
    让newAppIconName=“icon2”
    
    guard uiapplication.shared.alternateiconname!=newappiconname else返回
    
    uiapplication.shared.setAlternateIconName(newAppIconName)
    }
    }
    < /代码> 
    
    

    plist代码:

    <key>cfbundleicons</key>
    DICT & GT;
    <key>cfbundleprimary图标</key>
    DICT & GT;
    <key>cfbundleConfiles</key>
    数组& gt;
    <string>应用程序</string>
    &Lt/数组& gt;
    <key>uiprerenderedicon</key>
    和/和;
    &;
    <key>cfbundlealternateicons</key>
    DICT & GT;
    <key>图标2</key>
    DICT & GT;
    <key>cfbundleConfiles</key>
    数组& gt;
    <string>图标60</string>
    &Lt/数组& gt;
    <key>cfbundleicons~ipad</key>
    数组& gt;
    <string>itunesarwork80.png</string>
    &Lt/数组& gt;
    <key>uiprerenderedicon</key>
    和/和;
    &;
    &;
    &;
    < /代码> 
    
    

    PLIST代码:

    <key>CFBundleIcons</key>
    <dict>
        <key>CFBundlePrimaryIcon</key>
        <dict>
            <key>CFBundleIconFiles</key>
            <array>
                <string>AppIcon</string>
            </array>
            <key>UIPrerenderedIcon</key>
            <true/>
        </dict>
        <key>CFBundleAlternateIcons</key>
        <dict>
            <key>Icon2</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>icon60</string>
                </array>
                <key>CFBundleIcons~ipad</key>
                <array>
                    <string>iTunesArtwork80.png</string>
                </array>
                <key>UIPrerenderedIcon</key>
                <true/>
            </dict>
        </dict>
    </dict>
    

    enter image description here

        5
  •  0
  •   Brian Nezhad    6 年前

    错误显示的文件名与.plist中的文件名不同 CFBundleAlternateIcons . 确保在中指定了正确的文件名,并且实际上 存在于项目文件夹中 .

    错误显示 AI-Gorgosaurus 作为文件名。.plist屏幕截图显示 AI-Diabloceratops~ipad ,也请移除 ~ 文件名中的符号。

    在确定文件正确后,进行清理并构建项目。确保你有 @2x @3x 您的图标版本 项目文件夹 .

    Kaiyuan Xu 回答如何使用更清晰的图片 cfbundlealternateicons公司 .