馬甲包產(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)目名會(huì)彈出下面的確認(rèn)框
直接按下回車(chē)鍵 然后在接下來(lái)的提示框中點(diǎn)擊continue即可完成工程目錄的修改
2、修改項(xiàng)目根目錄及根目錄下文件夾的名稱(chēng)
將下圖中所有的名為MacoTest的文件名改成BMWTest即可3惜论、修改項(xiàng)目包內(nèi)容
選中工程BMWTest.xcodeproj目錄右鍵選中顯示包內(nèi)容雙擊打開(kāi)project.pbxproj文件
搜索舊項(xiàng)目名MacoTest字段全部替換為BMWTest字段
4许赃、打開(kāi)項(xiàng)目
如果項(xiàng)目沒(méi)有使用Cocoapods 直接雙擊打開(kāi)BMWTest.xcodeproj文件即可運(yùn)行
此時(shí)我直接運(yùn)行項(xiàng)目 報(bào)了大概如下三個(gè)錯(cuò)誤
大概意思是 相關(guān)目錄下沒(méi)找到對(duì)應(yīng)的文件
5、修改 Scheme
此時(shí)雖然可以跑起來(lái) 但發(fā)現(xiàn)Scheme還是舊的選中MacoTest在下拉框中選擇Manage Schemes...
然后把舊名稱(chēng)改成新名稱(chēng) 點(diǎn)擊close即可
此時(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 命令查看是否安裝好
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)名前綴鳖粟。