記錄

1.使用XXX.pch文件便捷開發(fā)+加速Build

在IOS開發(fā)的項(xiàng)目中有一個(gè)XX_Prefix.pch
XX_Prefix.pch:擴(kuò)展名.pch表示"precompiled header",這是一個(gè)你工程要用到的來自于外部框架的頭文件列表。xcode將編譯這些頭到文件,這將減少你在選擇Build 或Build and Go時(shí)編譯項(xiàng)目的時(shí)間。通常用到的頭文件已經(jīng)自動包含了pch,系統(tǒng)編譯每個(gè).m文件前,都會先imort這個(gè)文件。這樣就節(jié)省了添加include的時(shí) 間,相當(dāng)于加速編譯
還有就是可以再這里面放入宏,在整個(gè)工程中都可以用.
添加方法:


在targets->Build Setting中Apple LLVM 7.0 - language中做如下修改

例如在一個(gè)項(xiàng)目中有一個(gè)hello.h文件,需要在所有.m文件中都要包含這個(gè)文件就可以在
XX_Prefix.pch文件中引入hello.h

2.在一個(gè)應(yīng)用中打開其他應(yīng)用.

在iOS開發(fā)中,如何實(shí)現(xiàn)從app1打開app2。
基本的思路就是,可以為app2定義一個(gè)URL,在app1中通過打開這個(gè)URL來打開app2,在此過程中,可以傳送一些參數(shù)。下面來討論一下具體的實(shí)現(xiàn)過程。

  1. 在app2的info.plist中定義URL,就是在文件中添加URL types一項(xiàng)??砂聪聢D進(jìn)行添加。


  2. 在app1的代碼中打開剛才定義的URL,代碼如下:
    1 NSURL *url = [NSURL URLWithString:@"myapp://test?para1=1?2=2"]; 2 [[UIApplication sharedApplication] openURL:url];

當(dāng)然,這個(gè)URL的形式可以是其他形式的,只要以"myapp://"開始即可。
這樣,就可以在app1中打開app2.
打開之后,會調(diào)用app2的AppDelegate的

  • (BOOL)application:(UIApplication )application openURL:(NSURL)url sourceApplication:(
    NSString*)sourceApplication annotation:(id)annotation

由于URL是自己定義的,所以會存在URL重復(fù)的情況。經(jīng)過測試發(fā)現(xiàn),如果試圖打開這個(gè)URL,那么會打開先安裝的那個(gè)應(yīng)用.

3.在Xcode中使項(xiàng)目的Build隨項(xiàng)目的啟動而遞增.

在下圖所示位置加入
version=/usr/libexec/PlistBuddy -c "Print CFBundleVersion"$PRODUCT_SETTINGS_PATH
version=expr $version + 1

/usr/libexec/PlistBuddy -c "Set :CFBundleVersion $version"$PRODUCT_SETTINGS_PATH

/usr/libexec/PlistBuddy -c "Set :CFBundleShortVersionString $version"$PRODUCT_SETTINGS_PATH 這行代碼會讓version也自增,一般不需要

4.界面跳轉(zhuǎn).如電商項(xiàng)目中,A:商品界面(不是rootViewController)B:付款界面C:訂單界面,想直接從C跳到A(中間跳轉(zhuǎn)沒有出現(xiàn)B的過渡效果),這時(shí)使用popToViewController時(shí)不行,popViewControllerAnimated也不行的情況下.可以使用:

[self.navigationController popToViewController:[self.navigationController.viewControllersobjectAtIndex:1] animated:YES];

或者
for (UIViewController *controller inself.navigationController.viewControllers) {
if([controller isKindOfClass:[你要跳轉(zhuǎn)到的Controller class]]) {
[self.navigationController popToViewController:controller animated:YES];
}
}

5.如何判斷一個(gè)頁面是web頁面還是iOS原生頁面.

長按界面,如果出現(xiàn)可復(fù)制的界面就是web界面.

6.在Xcode里如何保證不會因?yàn)槭謿埜膭恿讼到y(tǒng)的源生源碼文件(降低權(quán)限).

終端輸入:
cd /Applications/Xcode.app/sudo chown -hR root:wheel Contents

7.使用Cocoapods導(dǎo)入的第三庫文件,發(fā)現(xiàn)import無法提示.

9.cocoapods升級或者降級:

升級:
sudo gem update --system
//更新gem

sudo gem install cocoapods

pod setup

pod --version
//查看版本

最近把mac系統(tǒng)升級到10.11系統(tǒng),但是在用pod install命令的時(shí)候,卻提示command not found或者:



在stackoverflow搜到的解釋是這樣的,This is happening because Apple has enabled rootless on the new install,也就是說在10.11系統(tǒng)上蘋果已經(jīng)啟用無根的安裝.
所以,保證Cocoapods在OS X 10.11系統(tǒng)上的正常使用,我們需要在命令行輸入這樣一句話:

sudo gem install -n /usr/local/bin cocoapods
 
降級:

sudo gem uninstall cocoapods
//選擇哪個(gè)版本,之后
<code>sudo gem install cocoapods -v 0.34.4</code>
//選擇那個(gè)版本

其中的Podfile文件最好是用Xcode編寫,省的報(bào)錯(cuò).

10.Xcode在archive時(shí)出現(xiàn)no identity found:

1.首先確定開發(fā)者賬號的相應(yīng)證書和描述文件是否是最新,打開鑰匙鏈刪除舊版,更新新版
2.Xcode->prefrence->Accounts.重新添加appid,把多余的描述文件刪除,重新下載新的描述文件.
3.整改項(xiàng)目里面的code Signing identify和PP文件.
4.clean一下.

11.因?yàn)镃ocoapods導(dǎo)致有些工程會出現(xiàn)liarary not funnd for -lPods如圖所示:


同時(shí),在相應(yīng)位置處,其他導(dǎo)入的庫正常,只有這個(gè)報(bào)紅現(xiàn)象,右鍵show in finder也沒反應(yīng).哪怕重新添加或者重新是用Cocoapods再次導(dǎo)入也無濟(jì)于事.



依然報(bào)紅,可以archive打包成ipa,但是無法連接手機(jī)測試觀察,按照網(wǎng)上給的很多方法依然無效.只能:
新建一個(gè)全新項(xiàng)目,把原來的庫重新導(dǎo)入新工程一次,一般新工程里面的libPod.a就是正常的了,如果非正常就是Cocoapods的原因了.如果正常就把新工程的libPod.a文件手動拷入原來的工程之中.
原工程仍然報(bào)紅,但是可以連接手機(jī)測試了.

12.用xml格式打開xxx.plist.

13.點(diǎn)擊按鈕直接跳轉(zhuǎn)至APP store相應(yīng)APP的下載頁面.

以微信為例,想要點(diǎn)擊按鈕跳轉(zhuǎn)到APP store的微信下載頁面.
最為關(guān)鍵的是跳轉(zhuǎn)鏈接,這里的鏈接不是像https://appsto.re/cn/S8gTy.i這種.也不是
https://itunes.apple.com/cn/app/wei-xin/id414478124?mt=8(這種跳轉(zhuǎn)中間會有Safari的過渡)
如果想要直接跳轉(zhuǎn)至微信的下載頁面,可以把https://換為itms:// 或者 itms-apps://.如:itms-apps://itunes.apple.com/cn/app/wei-xin/id414478124?mt=8
這種可以直接跳轉(zhuǎn)至APP store的下載頁面.其中鏈接可以使用Mac的APP store或者iTunes獲取.
為了讓開發(fā)者宣傳自己產(chǎn)品時(shí),下載地址更簡短易記,蘋果開放了 appstore.com “短” 鏈接服務(wù)。規(guī)則如下:
開發(fā)商主頁
iOS:https://appstore.com/<公司名>,比如,http://appstore.com/smule
Mac:https://appstore.com/mac/<公司名>,比如,http://appstore.com/mac/popcap

應(yīng)用下載地址iOS:https://appstore.com/<應(yīng)用名>,比如http://appstore.com/ocarina
Mac:https://appstore.com/mac/<應(yīng)用名>,比如,http://appstore.com/mac/peggle

開發(fā)商旗下 AppiOS:https://appstore.com/<公司名>/<應(yīng)用名>,比http://appstore.com/smule/ocarina
Mac:https://appstore.com/mac/<公司名>/<應(yīng)用名>,比如,http://appstore.com/mac/popcap/peggle

評論App跳轉(zhuǎn)頁面:itms-apps://ax.itunes.apple.com/WebObjects/MZStore.woa/wa/viewContentsUserReviews?type=Purple+Software&id=448165862

14.使用AFNetworing 3.0報(bào)錯(cuò)信息為:unacceptable content-type: text/html"

對應(yīng)到自己的項(xiàng)目里面,我用的是AFNetworking這套網(wǎng)絡(luò)請求包,需要改的是:

AFURLResponseSerialization.m文件

226行:

self.acceptableContentTypes =[NSSetsetWithObjects:@"application/json", @"text/html",@"text/json",@"text/javascript", nil];
加上藍(lán)色部分,其實(shí)就是添加一種服務(wù)器返回的數(shù)據(jù)格式。

15.因?yàn)镸ac系統(tǒng)升級和Xcode升級導(dǎo)致Cocoapods失效.

1.如果只是Xcode升級導(dǎo)致Cocoapods失效只需在終端中:
(這里最好先打開Xcode)
a.先獲取到UUID:
defaults read /Applications/Xcode.app/Contents/Info DVTPlugInCompatibilityUUID
如: XXXX-XXXX-VVVDF-JHFF
b.find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add 這里加上上面的UUID
如:find ~/Library/Application\ Support/Developer/Shared/Xcode/Plug-ins -name Info.plist -maxdepth 3 | xargs -I{} defaults write {} DVTPlugInCompatibilityUUIDs -array-add XXXX-XXXX-VVVDF-JHFF
c.把Xcode完全退出,接著重啟,會彈出是否加載插件界面,加載插件即可.
2.因?yàn)镸ac系統(tǒng)升級導(dǎo)致Cocoapods失效:

這里的GEM_PATH會顯示為空
解決方案1:
終端里輸入:gem env
可以查到gem的安裝路徑,找到SHELL PATH,如:

接著依次試一下上面的這些路徑.(這個(gè)方案我沒用親自試過,太麻煩)
解決方案2:
終端輸入:sudo gem install -n /usr/local/bin cocoapods
安裝完成之后,接著在cocoapods插件的GEM_PATH里寫入 /usr/local/bin 即可
(這個(gè)方案親測可用)

去除 UserInterfaceState.xcuserstate 文件為版本控制帶來的困擾

        ------- git-------

*一、在同 .Git目錄下創(chuàng)建.gitignore文件。在文件中加入如下內(nèi)容:
*.xcuserstate
project.xcworkspace
xcuserdata
UserInterfaceState.xcuserstate
project.xcworkspace/
xcuserdata/
UserInterface.xcuserstate

二、退出xcdoe, 打開終端(Terminal),進(jìn)入項(xiàng)目目錄下。
三、在終端鍵入 git rm --cached [YourProjectName].xcodeproj/project.xcworkspace/xcuserdata/[ YourUsername].xcuserdatad/UserInterfaceState.xcuserstate
四、在終端鍵入 git commit -m "Removed file that shouldn't be tracked"
五、重新打開Xcode commit, push。

       ------- svn-------

假設(shè)UserInterfaceState.xcuserstate在下面的目錄下面:
~/工程目錄/工程名字.xcodeproj/project.xcworkspace/xcuserdata/用戶名.xcuserdatad
打開終端執(zhí)行以下命令即可:
1.cd ~/工程目錄/工程名字.xcodeproj/project.xcworkspace/xcuserdata/用戶名.xcuserdatad
2.svn rm --force UserInterfaceState.xcuserstate [如果svn命令不能執(zhí)行,請安裝xcode中的命令行工具或用Spotlight查找svn所在]
svn update [可能需要]
svn commit -m "忽略該死的UserInterfaceState.xcuserstate"
3.export EDITOR=nano [注釋:這是bash下]
4.svn propedit svn:ignore . [注意后面有個(gè)點(diǎn)號,代表本目錄]
5.第4步執(zhí)行完了會彈出nano編輯界面,復(fù)制粘貼UserInterfaceState.xcuserstate后按Ctrl+X輸入Y保存即可.
6.輸入svn status就發(fā)現(xiàn)不顯示UserInterfaceState.xcuserstate了.證明修改成功.

Reveal使用

2、在左邊底部面板,點(diǎn)擊"+"號按鈕,然后選擇“Add Symbolic Breakpoint”。
3、在Symbol字段里面填入“UIApplicationMain”。
4、點(diǎn)擊“Add Action”按鈕,并確認(rèn)一下“Action”是設(shè)置到“Debugger Command”。
5、在Action下的文本框中貼入如下表達(dá)式
p.p1 {margin: 0.0px 0.0px 0.0px 0.0px; line-height: 17.0px; font: 14.0px 'Helvetica Neue'}span.s1 {font-kerning: none}

expr (Class)NSClassFromString(@"IBARevealLoader") == nil ? (void )dlopen("/Applications/Reveal.app/Contents/SharedSupport/iOS-Libraries/libReveal.dylib", 0x2) : ((void)0)

打開 Xcode生產(chǎn)的 .xcactivitylog文件轉(zhuǎn)為 .log

(位置) Xcode stores debug logs at
~/Library/Developer/Xcode/DerivedData/<YOURAPP>/Logs/Debug/
The .xcactivitylog files are actually just gz archives. Decompress them:

cd ~/Library/Developer/Xcode/DerivedData/<YOURAPP>/Logs/Debug/
EXT=".xcactivitylog"
for LOG in *.xcactivitylog; do
NAME=basename $LOG $EXT
gunzip -c -S $EXT "${NAME}${EXT}" > "${NAME}.log"
done

Now you can easily search them using grep or Spotlight or what your prefer.

[__NSCFNumber rangeOfCharacterFromSet:]: unrecognized selector sent to instance

這個(gè)是由于傳的參數(shù)類型不對所導(dǎo)致,找了半天才找到原因。
比如 [cell setColumnTitle:[homeData objectAtIndex:row]];
這里其實(shí)是要傳NSString類型,而其實(shí)返回的是NSArray類型,這個(gè)錯(cuò)誤不會立即出發(fā),而是過一段時(shí)間再出發(fā),所以不好定位。

The file “xxx-Info.plist” couldn’t be opened because there is no such file

我們有時(shí)候?qū)⒕W(wǎng)上下載或者是別人的項(xiàng)目拷到自己電腦上運(yùn)行時(shí)會出現(xiàn) The file “xxx-Info.plist” couldn’t be opened because there is no such file這個(gè)問題,這就是你在拷貝的時(shí)候位置變化了,所以沒有找到這個(gè)plist文件,解決的辦法

1.png
2.png

找到info.plist本地位置直接拖到這兩個(gè)位置上,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容