iOS馬甲包之修改項(xiàng)目名和批量修改類(lèi)名

馬甲包產(chǎn)生背景:

1也榄、解決被拒問(wèn)題:

由于蘋(píng)果市場(chǎng)單一 審核嚴(yán)格 很有可能導(dǎo)致各種各樣的上線(xiàn)被拒問(wèn)題 而多次被拒以后 就會(huì)大大降低審核通過(guò)率 嚴(yán)重者可能會(huì)給公司造成很大的損失 而一個(gè)好的馬甲包 就可以比較好的解決此類(lèi)問(wèn)題。

2南蹂、規(guī)避市場(chǎng)和政策風(fēng)險(xiǎn):

APP上線(xiàn)以后 為了更好的推廣 可能會(huì)有刷榜 刷熱搜的需求 而往往排名比較靠前的APP 會(huì)得到蘋(píng)果公司的重視與二次審查 一旦發(fā)現(xiàn)某些違規(guī)操作 很可能面臨主包被下架 甚至賬號(hào)被封的風(fēng)險(xiǎn) 馬甲包在遇到此類(lèi)問(wèn)題可以暫時(shí)作為主包的替代品 降低公司損失佃乘。

3囱井、增加搜索關(guān)鍵詞 為主包導(dǎo)量

蘋(píng)果賬號(hào)每個(gè)APP可以填寫(xiě)100個(gè)以?xún)?nèi)的搜索關(guān)鍵字 而顯然 搜索關(guān)鍵字越多 在Apple Store展現(xiàn)給用戶(hù)的概率越大 馬甲包上線(xiàn)可以填寫(xiě)與主包不同的關(guān)鍵字 以增加搜索關(guān)鍵字覆蓋率 同時(shí)馬甲包可以在APP內(nèi)通過(guò)彈窗等形式將用戶(hù)引流給主包。

制作馬甲包的方法和步驟有很多種趣避,比如局部上線(xiàn)庞呕、UI色調(diào)更改、代碼混淆程帕、更換上線(xiàn)賬號(hào)住练、重啟路由器、更換電腦打包愁拭、更改資源文件名稱(chēng)以及hash值等讲逛,制作馬甲包的時(shí)候可以根據(jù)APP當(dāng)下上線(xiàn)的難度和自己具體的需求綜合考量。
通常情況下 代碼層面上 馬甲包的前兩個(gè)步驟就是修改項(xiàng)目名和類(lèi)名岭埠。

修改項(xiàng)目名

本次項(xiàng)目名從MacoTest修改為BMWTest 步驟如下:

1盏混、打開(kāi)項(xiàng)目 對(duì)項(xiàng)目名重命名

選中工程目錄 按下回車(chē)鍵進(jìn)入編輯狀態(tài)
編輯項(xiàng)目名

輸入新的項(xiàng)目名會(huì)彈出下面的確認(rèn)框
項(xiàng)目名rename確認(rèn)框

直接按下回車(chē)鍵 然后在接下來(lái)的提示框中點(diǎn)擊continue即可完成工程目錄的修改
2、修改項(xiàng)目根目錄及根目錄下文件夾的名稱(chēng)

將下圖中所有的名為MacoTest的文件名改成BMWTest即可
需要修改的文件目錄
3惜论、修改項(xiàng)目包內(nèi)容

選中工程BMWTest.xcodeproj目錄右鍵選中顯示包內(nèi)容
顯示包內(nèi)容方式

雙擊打開(kāi)project.pbxproj文件
包內(nèi)容目錄

搜索舊項(xiàng)目名MacoTest字段全部替換為BMWTest字段
替換包內(nèi)容字段
4许赃、打開(kāi)項(xiàng)目

如果項(xiàng)目沒(méi)有使用Cocoapods 直接雙擊打開(kāi)BMWTest.xcodeproj文件即可運(yùn)行

如果項(xiàng)目中使用了Cocoapods 雙擊打開(kāi)BMWTest.xcworkspace文件 此時(shí)BMWTest應(yīng)該是紅色的 原因是路徑鏈接的還是MacoTest的舊路徑 此時(shí)點(diǎn)擊右邊側(cè)邊欄文件夾小圖標(biāo) 重新選一下路徑即可正常顯示(也可以把紅色文件連同Pods文件一起刪除掉 然后在左邊側(cè)邊欄區(qū)域右鍵重新添加BMWTest.xcodeproj和Pods兩個(gè)文件)
修改路徑后

此時(shí)我直接運(yùn)行項(xiàng)目 報(bào)了大概如下三個(gè)錯(cuò)誤
項(xiàng)目運(yùn)行報(bào)錯(cuò)

大概意思是 相關(guān)目錄下沒(méi)找到對(duì)應(yīng)的文件

此時(shí)打開(kāi)項(xiàng)目文件夾 找到 Podfile 文件 雙擊打開(kāi) 此時(shí)發(fā)現(xiàn)文件中target還是舊的 修改一下 然后打開(kāi)終端 cd到項(xiàng)目根目錄 pod install一下 重新運(yùn)行就可以成功了
Podfile
5、修改 Scheme

此時(shí)雖然可以跑起來(lái) 但發(fā)現(xiàn)Scheme還是舊的
舊Scheme

選中MacoTest在下拉框中選擇Manage Schemes...
管理Scheme

然后把舊名稱(chēng)改成新名稱(chēng) 點(diǎn)擊close即可
編輯Scheme

此時(shí)項(xiàng)目名修改已經(jīng)算是完成了 不過(guò)全局搜索一下舊項(xiàng)目名MacoTest 發(fā)現(xiàn)每個(gè)類(lèi)最上面 會(huì)有一些舊的注釋 全局替換掉就OK了馆类。
此時(shí)項(xiàng)目名已修改完成混聊。

批量修改類(lèi)名

批量修改類(lèi)名一般基于類(lèi)名有公共前綴的情況。

1乾巧、配置python3 環(huán)境

參考鏈接
配置好以后 打開(kāi)終端 輸入python3 命令查看是否安裝好

python3環(huán)境查看

2句喜、在項(xiàng)目根目錄下創(chuàng)建一個(gè).py可執(zhí)行文件

cd到項(xiàng)目根目錄
終端touch命令創(chuàng)建一個(gè).py文件
比如 touch rename.py
然后把下面的代碼復(fù)制到rename.py文件中 并根據(jù)實(shí)際情況修改相關(guān)配置(主要修改對(duì)應(yīng)的類(lèi)名前綴信息 需求改的文件后綴信息 項(xiàng)目根路徑以及項(xiàng)目包內(nèi)容路徑等)

import os

# 需要修改的類(lèi)名前綴
pre_str = 'Maco'
# 新的類(lèi)名前綴
pre_to_str = 'BMW'
# 根據(jù)需求搜尋以下文件類(lèi)型(如項(xiàng)目中使用xib storyboard等情況 可以自行添加)
suf_set = ('.h', '.m')
# 項(xiàng)目代碼文件根路徑
project_path = '/Users/wb2lz/Desktop/Test/BMWTest/BMWTest'
# 項(xiàng)目project.pbxproj文件路徑 需要更新配置文件中的類(lèi)名
pbxpro_path = '/Users/wb2lz/Desktop/Test/BMWTest/BMWTest.xcodeproj/project.pbxproj'

# 文件重命名函數(shù)预愤,返回新的文件名
def file_rename(file_path):
    root_path = os.path.split(file_path)[0]     # 文件目錄
    root_name = os.path.split(file_path)[1]     # 文件名包含擴(kuò)展名
    filename = os.path.splitext(root_name)[0];  # 文件名
    filetype = os.path.splitext(root_name)[1];  # 文件擴(kuò)展名

    new_path = os.path.join(root_path, filename.replace(pre_str, pre_to_str) + filetype)    # 拼接新路徑
    os.renames(file_path, new_path)             # 文件重命名
    return filename.replace(pre_str, pre_to_str)

# 定義一個(gè)字典 key=舊類(lèi)名 value=新類(lèi)名
needModifyDic = {}

# 遍歷文件,符合規(guī)則的進(jìn)行重命名
for (root, dirs, files) in os.walk(project_path):
    for file_name in files:
        if file_name.startswith((pre_str,)) and file_name.endswith(suf_set):
            old_name = os.path.splitext(file_name)[0]
            new_name = file_rename(os.path.join(root, file_name))
            needModifyDic[old_name] = new_name

# 遍歷文件藤滥,在文件中更換新類(lèi)名的引用
print(needModifyDic)
for (root, dirs, files) in os.walk(project_path):
    for file_name in files:
        if file_name.endswith(suf_set):
            print('-----fileName-------' + file_name)
            with open(os.path.join(root, file_name), 'r+') as f:
                print('========fileName========' + file_name)
                s0 = f.read()
                f.close()
                for key in needModifyDic:
                    if key in s0:
                        with open(os.path.join(root, file_name), 'r+') as f4:
                            s1 = f4.read().replace(key, needModifyDic[key])
                            print(key + ' ------> ' + needModifyDic[key])
                            f4.seek(0)
                            f4.write(s1)
                            f4.truncate()
                            f4.close()
# 替換配置文件中的類(lèi)名
for key in needModifyDic:
    with open(pbxpro_path, 'r+') as f:
        s0 = f.read()
        f.close()
        if key in s0:
            with open(pbxpro_path, 'r+') as f2:
                s = f2.read().replace(key, needModifyDic[key])
                f2.seek(0)
                f2.write(s)
                f2.truncate()
                f2.close()

然后終端執(zhí)行 python3 rename.py 即可修改相關(guān)類(lèi)名前綴鳖粟。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市拙绊,隨后出現(xiàn)的幾起案子向图,更是在濱河造成了極大的恐慌,老刑警劉巖标沪,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件榄攀,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡金句,警方通過(guò)查閱死者的電腦和手機(jī)檩赢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)违寞,“玉大人贞瞒,你說(shuō)我怎么就攤上這事〕寐” “怎么了军浆?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挡闰。 經(jīng)常有香客問(wèn)我乒融,道長(zhǎng),這世上最難降的妖魔是什么摄悯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任赞季,我火速辦了婚禮,結(jié)果婚禮上奢驯,老公的妹妹穿的比我還像新娘申钩。我一直安慰自己,他們只是感情好叨橱,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布典蜕。 她就那樣靜靜地躺著,像睡著了一般罗洗。 火紅的嫁衣襯著肌膚如雪愉舔。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 48,970評(píng)論 1 284
  • 那天伙菜,我揣著相機(jī)與錄音轩缤,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛火的,可吹牛的內(nèi)容都是我干的壶愤。 我是一名探鬼主播,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼馏鹤,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼征椒!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起湃累,我...
    開(kāi)封第一講書(shū)人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勃救,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后治力,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體蒙秒,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年宵统,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了晕讲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡马澈,死狀恐怖瓢省,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情痊班,我是刑警寧澤净捅,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布,位于F島的核電站辩块,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏荆永。R本人自食惡果不足惜废亭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望具钥。 院中可真熱鬧豆村,春花似錦、人聲如沸骂删。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)宁玫。三九已至粗恢,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欧瘪,已是汗流浹背眷射。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人妖碉。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓涌庭,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親欧宜。 傳聞我的和親對(duì)象是個(gè)殘疾皇子坐榆,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345