iOS動(dòng)態(tài)更換App圖標(biāo)-踩坑

聲明:
轉(zhuǎn)載請(qǐng)注明出處:http://www.reibang.com/p/9c78f161eeb8
評(píng)論請(qǐng)到原文,轉(zhuǎn)載一概不回復(fù)

iOS動(dòng)態(tài)更換App圖標(biāo)方法就不說了杜恰,這里給一篇詳細(xì)的介紹文章:iOS動(dòng)態(tài)更換App圖標(biāo)(一):基礎(chǔ)使用
這里只說一下遇到的坑

坑1

setAlternateIconName不能在didFinishLaunchingWithOptions中調(diào)用贫母,會(huì)報(bào)3072錯(cuò)誤洞就,需要在ViewController中調(diào)用卵皂,初步猜想可能是需要window初始化成功后調(diào)用悼粮,需要一個(gè)ViewController或者是UINavigationController之類的闲勺,沒有去驗(yàn)證

坑2

supportsAlternateIcons只是檢測(cè)是否能進(jìn)行更換,并不能進(jìn)行系統(tǒng)版本號(hào)判斷扣猫,需要自己進(jìn)行版本判斷菜循,要不然在低版本系統(tǒng)中會(huì)崩潰,比如:iOS7

坑3

icon資源文件需要在項(xiàng)目目錄下申尤,不能是Assets.xcassets中的圖片癌幕,否則無效

技巧點(diǎn)1

動(dòng)態(tài)更換App圖標(biāo)會(huì)有彈框衙耕,這個(gè)可以去掉,教程:iOS動(dòng)態(tài)更換App圖標(biāo)(二):無彈框更換App圖標(biāo)
其實(shí)不用非要使用擴(kuò)展勺远,寫在調(diào)用setAlternateIconNameViewController里面就可以了橙喘,在調(diào)用setAlternateIconName前使用代碼

Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));
Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(dy_presentViewController:animated:completion:));
// 交換方法實(shí)現(xiàn)
method_exchangeImplementations(presentM, presentSwizzlingM);

比如:

- (void)viewDidLoad {
    [super viewDidLoad];
    Method presentM = class_getInstanceMethod(self.class, @selector(presentViewController:animated:completion:));
    Method presentSwizzlingM = class_getInstanceMethod(self.class, @selector(dy_presentViewController:animated:completion:));
    // 交換方法實(shí)現(xiàn)
    method_exchangeImplementations(presentM, presentSwizzlingM);
    NSString *alternateIconName = [[UIApplication sharedApplication] alternateIconName];
    if (alternateIconName) {
        //重置到默認(rèn)icon
        [self setAppIconWithName:nil];
    } else {
        NSString *IconName = @"AppIcon-1";
        [self setAppIconWithName:IconName];
    }
}
- (void)setAppIconWithName:(NSString *)iconName {
    if (![[UIApplication sharedApplication] supportsAlternateIcons]) {
        return;
    }
    
    if ([iconName isEqualToString:@""]) {
        iconName = nil;
    }
    [[UIApplication sharedApplication] setAlternateIconName:iconName completionHandler:^(NSError * _Nullable error) {
        if (error) {
            NSLog(@"更換app圖標(biāo)發(fā)生錯(cuò)誤了:\n%@",error);
        }
    }];
}
- (void)dy_presentViewController:(UIViewController *)viewControllerToPresent animated:(BOOL)flag completion:(void (^)(void))completion {
    
    if ([viewControllerToPresent isKindOfClass:[UIAlertController class]]) {
        NSLog(@"title : %@",((UIAlertController *)viewControllerToPresent).title);
        NSLog(@"message : %@",((UIAlertController *)viewControllerToPresent).message);
        
        UIAlertController *alertController = (UIAlertController *)viewControllerToPresent;
        if (alertController.title == nil && alertController.message == nil) {
            return;
        } else {
            [self dy_presentViewController:viewControllerToPresent animated:flag completion:completion];
            return;
        }
    }
    
    [self dy_presentViewController:viewControllerToPresent animated:flag completion:completion];
}

技巧點(diǎn)2

plistCFBundleIcons中不需要設(shè)置默認(rèn)圖片,只需要設(shè)置替換的圖片就可以了胶逢,UIPrerenderedIcon也不需要設(shè)置厅瞎,這個(gè)是iOS7之前的參數(shù)(如果你現(xiàn)在還在支持iOS6,我只能說上帝保佑你宪塔,可憐的孩子磁奖!)囊拜,比如:

    <key>CFBundleIcons</key>
    <dict>
        <key>CFBundleAlternateIcons</key>
        <dict>
            <key>AppIcon-1</key>
            <dict>
                <key>CFBundleIconFiles</key>
                <array>
                    <string>AppIcon-1</string>
                </array>
            </dict>
        </dict>
    </dict>

使用的時(shí)候參考我上面提供的代碼就行了

我只是粗略測(cè)試了一下某筐,如果有出錯(cuò)的地方謝謝大家指出來

另外如果想在編譯的時(shí)候就把圖標(biāo)替換了,可以使用腳本來做冠跷,這樣就不能在運(yùn)行時(shí)替換了

--------------------6.7
附上jenkins打包替換圖標(biāo)方法南誊,沒寫過jenkins腳本的就要看了,我寫的比較粗略


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末蜜托,一起剝皮案震驚了整個(gè)濱河市抄囚,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌橄务,老刑警劉巖幔托,帶你破解...
    沈念sama閱讀 207,113評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異蜂挪,居然都是意外死亡重挑,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評(píng)論 2 381
  • 文/潘曉璐 我一進(jìn)店門棠涮,熙熙樓的掌柜王于貴愁眉苦臉地迎上來谬哀,“玉大人,你說我怎么就攤上這事严肪∈芳澹” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵驳糯,是天一觀的道長(zhǎng)篇梭。 經(jīng)常有香客問我,道長(zhǎng)酝枢,這世上最難降的妖魔是什么恬偷? 我笑而不...
    開封第一講書人閱讀 55,449評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮隧枫,結(jié)果婚禮上喉磁,老公的妹妹穿的比我還像新娘谓苟。我一直安慰自己,他們只是感情好协怒,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,445評(píng)論 5 374
  • 文/花漫 我一把揭開白布涝焙。 她就那樣靜靜地躺著,像睡著了一般孕暇。 火紅的嫁衣襯著肌膚如雪仑撞。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,166評(píng)論 1 284
  • 那天妖滔,我揣著相機(jī)與錄音隧哮,去河邊找鬼。 笑死座舍,一個(gè)胖子當(dāng)著我的面吹牛沮翔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播曲秉,決...
    沈念sama閱讀 38,442評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼采蚀,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了承二?” 一聲冷哼從身側(cè)響起榆鼠,我...
    開封第一講書人閱讀 37,105評(píng)論 0 261
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎亥鸠,沒想到半個(gè)月后妆够,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,601評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡负蚊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,066評(píng)論 2 325
  • 正文 我和宋清朗相戀三年神妹,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片盖桥。...
    茶點(diǎn)故事閱讀 38,161評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡灾螃,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出揩徊,到底是詐尸還是另有隱情腰鬼,我是刑警寧澤,帶...
    沈念sama閱讀 33,792評(píng)論 4 323
  • 正文 年R本政府宣布塑荒,位于F島的核電站熄赡,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏齿税。R本人自食惡果不足惜彼硫,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,351評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧拧篮,春花似錦词渤、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至礁凡,卻和暖如春高氮,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背顷牌。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評(píng)論 1 261
  • 我被黑心中介騙來泰國打工剪芍, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人窟蓝。 一個(gè)月前我還...
    沈念sama閱讀 45,618評(píng)論 2 355
  • 正文 我出身青樓罪裹,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親疗锐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坊谁,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,916評(píng)論 2 344

推薦閱讀更多精彩內(nèi)容

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件滑臊、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 12,033評(píng)論 4 62
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,527評(píng)論 25 707
  • 武漢的風(fēng),擄走了武漢的春箍铲,扔來了武漢的冬雇卷。 倘若風(fēng)如你,必不欺我冬無衣颠猴! 這是我來武漢的第三個(gè)冬天关划,也可能是我在武...
    星夜日暘閱讀 158評(píng)論 0 0
  • 嗅過鉛華染成的墨香,你是否會(huì)想起那些與文字結(jié)緣的人付之梨棗前的模樣翘瓮? “你因夢(mèng)想而在這個(gè)世上受苦贮折,就像一條河流,因...
    伊伊烑閱讀 530評(píng)論 0 0
  • 相信很多人都看見過電動(dòng)摩托車资盅,就是在三四線城市里调榄,滿大街都是大姨大媽們買菜代步的交通工具。但是今天我們要介紹的是一...
    小賽TT閱讀 3,711評(píng)論 0 0