前言:
接觸到Telegram是因?yàn)楣ぷ鞯脑蚋刈撸枨笫菍?duì)Telegram進(jìn)行二次開(kāi)發(fā)焚志。面臨的問(wèn)題是:下載過(guò)源碼以后發(fā)現(xiàn)很多錯(cuò)誤,所以就開(kāi)了踩坑歷劫之旅胞枕。
開(kāi)篇提醒:
1.由于工程比較大杆煞,有時(shí)候反應(yīng)慢,build的時(shí)候可能會(huì)達(dá)到30分鐘以上,需要內(nèi)心等待
2.還是由于工程比較大决乎,有時(shí)候你修改完了bug队询,但是Xcode沒(méi)反應(yīng)過(guò)來(lái),等你去編譯的時(shí)候依然報(bào)錯(cuò)构诚,這個(gè)時(shí)候如果你感覺(jué)你是對(duì)的蚌斩,就要敢于懷疑工具的緩存問(wèn)題,clean 一下工程或者采取更暴力的措施==>關(guān)機(jī) 重啟Xcode ,這種問(wèn)題我遇到過(guò)3次以上
正文
一范嘱、Telegram下載地址:
二送膳、下載過(guò)源代碼以后開(kāi)始編譯,改bug
1丑蛤、第一次編譯(command+B)報(bào)錯(cuò):“No signing certificate "iOS"Development......”
截圖1:
解決辦法:
1叠聋、證書(shū)和配置文件錯(cuò)誤,統(tǒng)一處理受裹,按照groups app 每個(gè)target之間的規(guī)律和關(guān)系自定義每一個(gè)target對(duì)應(yīng)的 Bundle Identifier碌补,
groups app 每個(gè)target之間的Bundle Identifier對(duì)應(yīng)規(guī)律是:
groups id: group.com.abc.banana
Telegraph: com.abc.banana (groups app規(guī)律是這一Bundle Identifier是根據(jù)自己的心情定義的,其他的Bundle Identifier都是基于這個(gè)Bundle Identifier)
Share: com.abc.banana.share
watchkitapp: com.abc.banana.watchkitapp
watchKit Extension: com.abc.banana.watchkitapp.watchkitextension
SiriIntents: com.abc.banana.siriintents
LegacyDatabase: com.abc.banana.legacydatabase
Widget: com.abc.banana.widget
解釋一下:Telegraph: com.abc.banana 的意思是 Telegraph這個(gè)target對(duì)應(yīng)的Bundle Identifier 是com.abc.banana 其他的不一一解釋了棉饶。
2厦章、然后把a(bǔ)pp中所有出現(xiàn)的簽名,Signing 統(tǒng)一選擇 Automatically manage signing
截圖2:
3照藻、app中出現(xiàn)的其他的target 對(duì)應(yīng)的Bundle Identifier根據(jù)自己的心情隨便定義吧袜啃,然后同樣Signing 統(tǒng)一選擇 Automatically manage signing,如果你要問(wèn)我為什么選擇Xcode 自動(dòng)配置證書(shū)幸缕,我的理由是:app中的target太多群发,需要配置的文件很多,所以自動(dòng)配置最安全并且省時(shí)間冀值。
當(dāng)你感覺(jué)你已經(jīng)修改完這一類錯(cuò)誤的時(shí)候在app文件搜索區(qū)域 搜索 xcodeproj 確保所有的project中的所有target證書(shū)配置完畢也物,然后滿心歡喜的build一下宫屠,看看有沒(méi)有錯(cuò)誤
4列疗、閑聊一下:app文件比較多,有時(shí)候編譯的時(shí)間很長(zhǎng)浪蹂,不要著急抵栈,去倒杯水喝著坐等,等待下一波錯(cuò)誤坤次,接下來(lái)都是這種節(jié)奏古劲,慢慢改吧,也別灰心缰猴,最后你發(fā)現(xiàn)沒(méi)改多少東西产艾,都是配置文件的修改
2、第二次編譯,報(bào)錯(cuò)闷堡,先看第一種錯(cuò)誤“error: An Application Group with Identifier 'group.org.telegram.TelegramEnterprise' is not available. Please enter a different string. (in target 'Share')
”
截圖3:
我發(fā)現(xiàn)第一種錯(cuò)誤有很多處隘膘,這里先解決一下,其他地方同理杠览,解決方法看如下截圖
截圖4:
如果你還沒(méi)有在開(kāi)發(fā)者賬號(hào)中申請(qǐng)自己的groups id弯菊,趕緊去申請(qǐng)一個(gè),然后再來(lái)修改此處錯(cuò)誤踱阿,至于groups id的格式我已經(jīng)在上文提到了管钳,我寫(xiě)的是 group.com.abc.banana ,
修改之后如下圖
截圖5:
你會(huì)發(fā)現(xiàn)這個(gè)選項(xiàng)提醒我們配置有錯(cuò)誤 看紅色的感嘆號(hào)提示重點(diǎn)錯(cuò)誤內(nèi)容是:"Share has conflicting provisioning settings",解決這個(gè)配置錯(cuò)誤软舌,來(lái)到Share 對(duì)應(yīng)的Build Settings 里面去尋找provisioning對(duì)應(yīng)的設(shè)置才漆,provisioning和解決辦法如下圖:
截圖6:
解決方法已經(jīng)用綠色文字備注了,怎么刪除配置呢佛点,一共8行配置栽烂,從第一行開(kāi),始單擊選中第一行 然后按 鍵盤(pán)delete鍵即可恋脚,后面依次刪除腺办,遇到刪除不掉的,就雙擊右邊的文件糟描,把彈框里的東西刪除即可怀喉,如下圖
截圖7:
然后再回到Share 對(duì)應(yīng)的 設(shè)置選項(xiàng)查看,之前的App Groups 處已經(jīng)不報(bào)錯(cuò)了船响,如下
截圖8:
接著把a(bǔ)pp中其他地方出現(xiàn)同樣錯(cuò)誤的幾個(gè)地方按照這個(gè)思路依次都修改了吧躬拢,
按照這個(gè)思路修改了Telegraph 這個(gè)PROJECT 對(duì)應(yīng)的7個(gè)target 中的多個(gè)錯(cuò)誤,再來(lái)Command + build 編譯一下看看有沒(méi)有其他錯(cuò)誤了见间,驚喜不斷感覺(jué)快成功了
3聊闯、第三次編譯(command+B)報(bào)錯(cuò):"error: Multiple commands produce '/Users/maohongpeng/Library/Developer/Xcode/DerivedData/Telegram-cqpmbkdcpsuygodgvbxuftuxshhi/Build/Products/Release-iphoneos/libtgvoip.framework/Info.plist':......"
如下圖
截圖9:
我解決問(wèn)題的方法,選擇簡(jiǎn)單粗暴的辦法米诉,如下圖步驟菱蔬,選擇 File---->Workspace Settings ---->Build System,然后把Build System修改為L(zhǎng)egacy Build System,具體可以參考他人博客
4史侣、第四次編譯(command+B)報(bào)錯(cuò):"Code Signing Error: watchkitapp Extension has conflicting provisioning settings. watchkitapp Extension is automatically signed for development, but a conflicting code signing identity iPhone Distribution has been manually specified. Set the code signing identity value to "iPhone Developer" in the build settings editor, or switch to manual signing in the project editor"
如下 截圖10:
解決辦法:1拴泌、找到錯(cuò)誤的地方 Code Signing Identity 下面的紅色框框里所有的行全部全部修改為 IOS Developer (目的是要把之前一個(gè)開(kāi)發(fā)者在target里面的簽名配置換成當(dāng)前開(kāi)發(fā)者的證書(shū)文件簽名) (此處截圖上傳失敗,抱歉啦>鳌)
2蚪腐、修改了Code Signing Identity之后,我看到了Code Signing Identity上面的設(shè)置Code Signing Entitlements然后我發(fā)現(xiàn)上圖 entitlements 文件的路徑不正確税朴,里面的配置路徑可能是之前的開(kāi)發(fā)者留下來(lái)的回季,這里有兩個(gè)辦法可以修改:
第一種是:簡(jiǎn)單粗暴的方法:直接刪除app中所有的 Ccode Signing Entitlements下面配置的的文件路徑家制。然后你回到這個(gè)target (也就是Widget)的App Groups 發(fā)現(xiàn)報(bào)錯(cuò)了,這時(shí)候你 點(diǎn)擊 Fix issue 讓Xcode自動(dòng)修復(fù)泡一,其實(shí)此時(shí)Xcode會(huì)自動(dòng)幫你配置上正確的Ccode Signing Entitlements的文件路徑慰丛,(流程圖上傳失敗,抱歉)瘾杭。
第二種辦法:就是你找到Widget.entitlements在工程中的相對(duì)路徑(相對(duì)路徑可以直接把Widget.entitlements拖進(jìn)終端里诅病,查看路徑,然后取路徑的后半部分在打開(kāi)的工程中能找到的部分粥烁,作為這個(gè)文件的路徑贤笆,然后復(fù)制,粘貼到設(shè)置中)讨阻,然后把路徑自己手動(dòng)填寫(xiě)到路徑設(shè)置的地方芥永,搞定,這個(gè)方法比價(jià)麻煩钝吮,容易出錯(cuò)埋涧,我不提倡,在此不再贅述奇瘦。
按照第一種解決辦法棘催,把工程中所有的 .entitlements 結(jié)尾的 權(quán)限配置文件的路徑,都給重新設(shè)置一次吧耳标,否則工程還會(huì)報(bào)錯(cuò)醇坝。
5、第五次編譯(command+B)報(bào)錯(cuò):“error: WatchKit App doesn't contain any WatchKit Extensions whose WKAppBundleIdentifier matches "com.sfbm.banana.watchkitapp". Verify that the value of WKAppBundleIdentifier in your WatchKit Extension's Info.plist matches the value of CFBundleIdentifier in your WatchKit App's Info.plist.
(流程圖上傳失敗次坡,抱歉)
解決辦法是:
錯(cuò)誤提醒翻譯過(guò)來(lái)就是:需要你把WKAppBundleIdentifier 的對(duì)應(yīng)內(nèi)容設(shè)置成 com.sfbm.banana.watchkitapp 呼猪,解釋一下也就是要把WKAppBundleIdentifier 對(duì)應(yīng)的內(nèi)容設(shè)置成WatchKit App 這個(gè)target 所對(duì)應(yīng)的 CFBundleIdentifier,因?yàn)槲业腤atchKit App 這個(gè)target的BundleIdentifier已經(jīng)設(shè)置成了com.sfbm.banana.watchkitapp砸琅,所以我很清楚的去修改這個(gè)配置文件宋距,通常來(lái)說(shuō)你的BundleIdentifier和我的一定是不一樣的,所以你需要根據(jù)錯(cuò)誤提示去修改這個(gè)WKAppBundleIdentifier對(duì)應(yīng)的value
6症脂、第六次編譯(command+B)報(bào)錯(cuò):“error: The value of WKCompanionAppBundleIdentifier in your WatchKit app's Info.plist "com.sfbm" does not match the bundle identifier of your companion app "com.sfbm.banana".”
[圖片上傳失敗...(image-a615bf-1546060814729)]
解決辦法:
錯(cuò)誤提醒翻譯過(guò)來(lái)是:需要把WKCompanionAppBundleIdentifier 的值"com.sfbm" 修改為 "com.sfbm.banana"谚赎,從而和你的companion app的bundle identifier相匹配,解釋一下:也就是此處要把WKCompanionAppBundleIdentifier的值設(shè)置為 Telegraph這個(gè)target 所對(duì)應(yīng)的bundle identifier摊腋。然后我們?nèi)ピO(shè)置
7沸版、第七次編譯(command+B),結(jié)果是:Build Succeeded ,
搞定兴蒸,真機(jī)測(cè)試,打包都讓xcode自動(dòng)去配置文件和證書(shū)细办,就沒(méi)有任何問(wèn)題了橙凳,如果您還有不懂的蕾殴,歡迎留言,我們相互交流岛啸,一起進(jìn)步~(再次對(duì)文中流程圖上傳失敗表示十萬(wàn)分抱歉钓觉,后期有時(shí)間再重新編輯上傳)