Dynamic Icon Change for iphone

前端 未结 3 2024
星月不相逢
星月不相逢 2021-01-01 03:34

My question is also same that others asked before.

I found that once you set the Icon for the Application we can\'t change the Application

相关标签:
3条回答
  • 2021-01-01 03:45

    One way would be to rewrite the icon.png file programmatically. You'd need to search a private API that allows access to your App Resources filestystem

    0 讨论(0)
  • 2021-01-01 03:51

    Before iOS 8 i tried one way which give me positive result at minimum once:

    set icon.png as link to ../Documents/icon.png

    But you need to force ask Springboard to redownload icons for installed applications (cause Springboard cache them)

    Since iOS 8 this way does not work cause Documents folder was moved to dynamical path.

    So you should find way to update readonly icon.png from bundle.

    For apps installed to /Applications/ (through Cydia) - it's possible to do.

    For apps installed via adhoc - There is no way to update readonly icon.png (as i know)

    0 讨论(0)
  • 2021-01-01 04:08

    iOS 10.3+

    There is a method called setAlternateIconName: which is introduced in iOS 10.3, through which you can change the app's icon, however these icons should be predefined. It means that the icons should be added to the app's bundle and referenced in the info.plist.

    Example:

    A typical info.plist looks like:

    <key>CFBundleIcons</key>
    <dict>
        <key>CFBundleAlternateIcons</key>
        <dict>
            <key>alternate_icon_name</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>alternate_icon_file</string>
                </array>
                <key>UIPrerenderedIcon</key>
                <false/>
            </dict>
            <key>CFBundlePrimaryIcon</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>default_icon_file</string>
                </array>
                <key>UIPrerenderedIcon</key>
                <false/>
            </dict>
        </dict>
    </dict>
    

    Implement the code like:

    Objective C:

    [[UIApplication sharedApplication] setAlternateIconName:@"alternate_icon_name" completionHandler:^(NSError * _Nullable error) {
        NSLog(@"Error...");
    }];
    

    Swift 3:

    if UIApplication.shared.supportsAlternateIcons
    {
        UIApplication.shared.setAlternateIconName("alternate_icon_name", completionHandler: { (error) in
            print(error ?? "")
        })
    }
    

    Before iOS 10.3

    You cannot change the icon file dynamically, because the icon file name is stored on the application plist.

    Application plist.

    You cannot change the application plist dynamically, because it is stored on the application bundle which is readonly.

    So your requirement is not possible.

    0 讨论(0)
提交回复
热议问题