2017-02-13 3 views
5

Я пытаюсь установить альтернативные иконки для моего приложения в iOS 10.3, но каждый раз, когда я называю метод Xcode возвращается:Установка альтернативного App Icon возвращает ошибку 3072: «Операция была отменена» в прошивкой 10,3

Error Domain = NSCocoaErrorDomain Code = 3072 «Операция была отменена».

Я использую @KlimczakM «S ответ от this почты, чтобы установить значок (specifyIcon метода называется ниже), но я использую свой собственный метод для загрузки предпочтительной иконки из настроек:

let iconSetting = userDefaults.string(forKey: "appIconSetting") 
print("The icon setting is: \(iconSetting ?? "error getting appIconSetting.")") 

switch iconSetting! { 
case "white": 
    specifyIcon(nil) 
case "dark": 
    specifyIcon("dark") 
case "text": 
    specifyIcon("text") 
case "textdark": 
    specifyIcon("textdark") 
case "rainbow": 
    specifyIcon("rainbow") 
default: 
    specifyIcon(nil) 
    print("ERROR setting icon.") 
} 

func specifyIcon(_ icon: String?) { 
    //(@KlimczakM's answer) 
} 

В мой Info.plist У меня есть пять икон; white, dark, rainbow, text и textdark:

<key>CFBundleIcons</key> 
    <dict> 
     <key>CFBundleAlternateIcons</key> 
     <dict> 
      <key>white</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_white</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>dark</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_dark</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>rainbow</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>rainbow</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>text</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_text</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
      <key>textdark</key> 
      <dict> 
       <key>CFBundleIconFiles</key> 
       <array> 
        <string>ic_textdark</string> 
       </array> 
       <key>UIPrerenderedIcon</key> 
       <false/> 
      </dict> 
     </dict> 
     <key>CFBundlePrimaryIcon</key> 
     <dict> 
      <key>CFBundleIconFiles</key> 
      <array> 
       <string>ic_white</string> 
      </array> 
     </dict> 
    </dict> 

Все эти иконки содержатся в PNG файлов в папке под названием «ресурсы» в моем приложении пачке.

Как исправить эту проблему?

ответ

4

я получаю эту ошибку из-за двух причин,

  • Во-первых, я не делал «Добавить файлы в" ProjectNameFoo» путем добавления файла PNG проекта. Иначе это не сработало. После этого он начал видеть значок.
  • Во-вторых, я получал эту ошибку, потому что я пытался изменить значок после в viewDidLoad. Я не понимаю, но это дало мне такую ​​же ошибку. Когда я пытаюсь с задержкой, как в коде ниже, он работал независимо от того, что я дал.

    override func viewDidLoad() { 
        super.viewDidLoad() 
    
        delay(0.01) { 
         if foo().isFoo() { 
          print("") 
    
          self.changeIcon(name: "ColdRabbit") 
         } 
         else { 
          print("") 
         } 
        } 
    } 
    
    func delay(_ delay:Double, closure:@escaping()->()) { 
        let when = DispatchTime.now() + delay 
        DispatchQueue.main.asyncAfter(deadline: when, execute: closure) 
    } 
    
+0

Это работало отлично для меня! Благодаря тонну! – Wilsonator5000

+0

Без проблем, спасибо вам. – flyingBear

+0

@flyingBear вы нашли причину этой проблемы? Я имею в виду, почему он не работает без задержки? – user3752049