1. AFNetworking在眾多iOS開源項目中,AFNetworking可以稱得上是最受開發(fā)者歡迎的庫項目。AFNetworking是一個輕量級的iOS、Mac OS X網(wǎng)絡(luò)通信類庫,現(xiàn)在是GitHub上第三大Objective-C庫。它建立在NSURLConnection、NSOperation等類庫的基礎(chǔ)上,讓很多網(wǎng)絡(luò)通信功能的實現(xiàn)變得十分簡單,因此,許多iOS應(yīng)用開發(fā)都會使用到它。支持HTTP請求和基于REST的網(wǎng)絡(luò)服務(wù)(包括GET、POST、PUT、DELETE等);支持ARC;要求iOS 5.0及以上版本;有一些插件擴展已有的功能,還有一個功能齊全的API;從URL中獲取JSON特別簡單。2. Three20Three20原本是iPhone版Facebook中所使用的工具庫,包括照片查看器等一系列的iPhone UI類集,以及HTTP磁盤緩存等一些通用工具。后來從Facebook iPhone應(yīng)用中剝離出來,成為了一個深受開發(fā)者喜愛的通用框架。3. facebook-ios-sdk此前在“GitHub上最受歡迎的開源項目”Android系列文章(一)中,我們曾介紹過允許開發(fā)者將Facebook集成到Android應(yīng)用中的Facebook SDK for Android。Facebook SDK for iOS和它一樣,可以讓開發(fā)者將Facebook相關(guān)功能集成到自己的iOS App中。Facebook無疑是最成功的SNS社區(qū),如果能夠讓App具有與Facebook集成的功能,那勢必會帶來非常好的效果。Facebook SDK for iOS項目更新頻率很高,想要獲取更多關(guān)于示例、文檔、將SDK集成到App中、源代碼等信息,可直接登陸Facebook Developers查看。4. RestKitRestkit是一個主要用于iOS上網(wǎng)絡(luò)通信的開源Objective-C框架,除了發(fā)送請求、接受響應(yīng)這些基本功能外,還附帶Core Data,以及將遠程JSON映射為本地對象的功能。主要特點:可在iOS和Mac OS X的Objective-C中與RESTful Web服務(wù)進行簡單交互;包含簡單的HTTP Request/Response API;帶有強大的對象映射系統(tǒng),用于減少代碼長度;RestKit可降低JSON/XML的處理的資源消耗,支持通過SBJSON和YAJL進行JSON解析。5. asi-http-requestASIHTTPRequest是一款極其強勁的HTTP訪問開源項目,能夠讓簡單的API完成非常復(fù)雜的功能,比如異步請求、隊列請求、GZIP壓縮、緩存、斷點續(xù)傳、進度跟蹤、上傳文件、HTTP認證。ASIHTTPRequest適用于基本的HTTP請求,和基于REST的服務(wù)之間的交互。使用Objective-C編寫,能夠同時用于Mac OS X和iPhone應(yīng)用中。6. cocos2d-x在《GitHub上最火的40個Android開源項目(一)》中,我們已經(jīng)非常詳細地介紹了cocos2d-x開源項目。cocos2d-x支持iOS、Android、Windows Phone 8、Bada、BlackBerry、Marmalade、Windows、Linux等多個平臺。7.cocos2d-iphone(cocos2d)cocos2d for iPhone是一個開源框架,用于為iPod Touch、iPhone、iPad及Mac OS X構(gòu)建2D游戲、演示程序及其他圖形交互式應(yīng)用?;赾ocos2d設(shè)計,使用相同的API,但不同于cocos2d使用Python,cocos2d for iPhone是使用Objective-C實現(xiàn)的。cocos2d for iPhone主要特性:快免費易于使用社區(qū)支持8.cocos2d-iphone(jpsarda)該項目是對cocos2d for iPhone的擴展。9. GPUImageGPUImage是一個基于GPU圖像和視頻處理的開源iOS框架。主要功能如下:提供各種各樣的圖像處理濾鏡,并且支持照相機和攝像機的實時濾鏡;GPUImage顧名思義,是基于GPU的圖像加速,因此圖像處理速度非???,并且能夠自定義圖像濾鏡;支持ARC。10. MonoGameMonoGame是一個Microsoft XNA 4.x Framework的開源跨平臺實現(xiàn)。此前在Android開源項目系列文章(一)中我們也進行了詳細的介紹。MonoGame支持平臺:iOS(包括Ritina Display)AndroidWindows(OpenGL)Mac OS XLinuxWindows Store Apps(Windows 8、Windows RT)Windows Phone 8PlayStation Mobile(目前僅支持2D)OUYA11. NimbusNimbus是一個開源的iOS框架,比起Three20,Nimbus的文檔更為全面、豐富,能夠?qū)崿F(xiàn)很多非常炫的界面特效。因此,開發(fā)者可以借助Nimbus來降低項目設(shè)計的復(fù)雜度。12. cheddar-iosCheddar是一個簡單即時的任務(wù)管理器,Cheddar for iOS是Cheddar的iOS客戶端,通用于iPhone和iPad。13. ViewDeckIIViewDeckController能夠?qū)崿F(xiàn)類似于Path 2.0 的視圖左右滑動的效果,支持向左或向右順滑的滑動操作。14. ShareKitShareKit是iPhone開發(fā)的第三方接口,允許你一鍵分享文字、圖片、網(wǎng)址、文件等內(nèi)容到Facebook、Twitter、Delicious、Tumblr、Google Reader等第三方網(wǎng)站上。15. GMGridViewGMGridView是一款開源的iOS(iPhone/iPad)表格視圖,允許用戶手勢對表格單元進行排序,在單元格需要展示時才進行裝載,這樣極大地提高了表格的效率。其中的伸縮/旋轉(zhuǎn)/平移手勢能夠讓用戶改變視圖,還能夠?qū)崿F(xiàn)從CellView到全屏的切換。16. QuickDialogQuickDialog可以幫助開發(fā)者快速創(chuàng)建復(fù)雜的表單,實現(xiàn)包括登錄界面在內(nèi)的各種樣式的TableView輸入界面,此外,還可以創(chuàng)建帶有多個文本域的表格及項目。17. appiraterAppirater是一個可以直接使用到任何iPhone應(yīng)用(iOS4.0及以上)中的開源類,用于提醒用戶在打開App時,對應(yīng)用進行或打分。18. SVProgressHUDSVProgressHUD能夠?qū)崿F(xiàn)多種HUD效果,多用于程序正在執(zhí)行耗時較長的任務(wù),需要用戶等待。除了顯示等待的HUD,還可以顯示命令執(zhí)行成功或者失敗的HUD。19. Reader該項目能夠讓iOS開發(fā)者輕而易舉地在iOS設(shè)備屏幕上顯示PDF文件。代碼通用,不需要任何XIB(因為所有UI元素都是代碼生成的,具有極大的靈活性),運行于iOS 4.0及其以上版本設(shè)備中,同時還支持所有Retina Display設(shè)備。支持:諸如iBooks等的文檔導(dǎo)航;設(shè)備全方位旋轉(zhuǎn);對PDF進行加密(密碼保護);PDF鏈接(URI及跳轉(zhuǎn)頁面);PDF旋轉(zhuǎn)頁面。20.CocoaAsyncSocketCocoaAsyncSocket提供了十分強大而又易用的Mac OS X及iOS異步套接庫,支持TCP和UDP,其中,AsyncSocket類是支持TCP的,AsyncUdpSocket是支持UDP的。AsyncSocket是封裝了CFSocket和CFSteam的TCP/IP socket網(wǎng)絡(luò)庫,提供異步操作。AsyncUdpSocket是UDP/IP socket網(wǎng)絡(luò)庫,包裝自CFSocket。
西固ssl適用于網(wǎng)站、小程序/APP、API接口等需要進行數(shù)據(jù)傳輸應(yīng)用場景,ssl證書未來市場廣闊!成為創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場價格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18982081108(備注:SSL證書合作)期待與您的合作!
Jukebox 這個框架是Swift版本
GitHub: :
第0步,pod把StreamingKit導(dǎo)進來
第一步
AppDelegate.m:
第二步初始化一個控制器:
還有后臺如何播放音樂?一張圖片就明白
如果有什么問題,可以微薄“梁同桌”私信我。留言都行
阿里妹導(dǎo)讀:剛剛,阿里巴巴正式對外開源了基于 Apache 2.0 協(xié)議的協(xié)程開發(fā)框架 coobjc,開發(fā)者們可以在 Github 上自主下載。
coobjc是為iOS平臺打造的開源協(xié)程開發(fā)框架,支持Objective-C和Swift,同時提供了cokit庫為Foundation和UIKit中的部分API提供了 協(xié)程 化支持,本文將為大家詳細介紹coobjc的設(shè)計理念及核心優(yōu)勢。
從2008年第一個iOS版本發(fā)布至今的11年時間里,iOS的異步編程方式發(fā)展緩慢。
基于 Block 的異步編程回調(diào)是目前 iOS 使用最廣泛的異步編程方式,iOS 系統(tǒng)提供的 GCD 庫讓異步開發(fā)變得很簡單方便,但是基于這種編程方式的缺點也有很多,主要有以下幾點:
針對多線程以及尤其引發(fā)的各種崩潰和性能問題,我們制定了很多編程規(guī)范、進行了各種新人培訓(xùn),嘗試降低問題發(fā)生的概率,但是問題依然很嚴峻,多線程引發(fā)的問題占比并沒有明顯的下降,異步編程本來就是很復(fù)雜的事情,單靠規(guī)范和培訓(xùn)是難以從根本上解決問題的,需要有更加好的編程方式來解決。
上述問題在很多系統(tǒng)和語言開發(fā)中都可能會碰到,解決問題的標準方式就是使用協(xié)程,C#、Kotlin、Python、Javascript 等熱門語言均支持協(xié)程極其相關(guān)語法,使用這些語言的開發(fā)者可以很方便的使用協(xié)程及相關(guān)功能進行異步編程。
2017 年的 C++ 標準開始支持協(xié)程,Swift5 中也包含了協(xié)程相關(guān)的標準,從現(xiàn)在的發(fā)展趨勢看基于協(xié)程的全新的異步編程方式,是我們解決現(xiàn)有異步編程問題的有效的方式,但是蘋果基本已經(jīng)不會升級 Objective-C 了,因此使用Objective-C的開發(fā)者是無法使用官方的協(xié)程能力的,而最新 Swift 的發(fā)布和推廣也還需要時日,為了讓廣大iOS開發(fā)者能快速享受到協(xié)程帶來的編程方式上的改變,手機淘寶架構(gòu)團隊基于長期對系統(tǒng)底層庫和匯編的研究,通過匯編和C語言實現(xiàn)了支持 Objective-C 和 Swift 協(xié)程的完美解決方案 —— coobjc。
核心能力
內(nèi)置系統(tǒng)擴展庫
coobjc設(shè)計
最底層是協(xié)程內(nèi)核,包含了棧切換的管理、協(xié)程調(diào)度器的實現(xiàn)、協(xié)程間通信channel的實現(xiàn)等。
中間層是基于協(xié)程的操作符的包裝,目前支持async/await、Generator、Actor等編程模型。
最上層是對系統(tǒng)庫的協(xié)程化擴展,目前基本上覆蓋了Foundation和UIKit的所有IO和耗時方法。
核心實現(xiàn)原理
協(xié)程的核心思想是控制調(diào)用棧的主動讓出和恢復(fù)。一般的協(xié)程實現(xiàn)都會提供兩個重要的操作:
我們基于線程的代碼執(zhí)行時候,是沒法做出暫停操作的,我們現(xiàn)在要做的事情就是要代碼執(zhí)行能夠暫停,還能夠再恢復(fù)。 基本上代碼執(zhí)行都是一種基于調(diào)用棧的模型,所以如果我們能把當前調(diào)用棧上的狀態(tài)都保存下來,然后再能從緩存中恢復(fù),那我們就能夠?qū)崿F(xiàn)yield和 resume。
實現(xiàn)這樣操作有幾種方法呢?
上述第三種和第四種只是能過做到跳轉(zhuǎn),但是沒法保存調(diào)用棧上的狀態(tài),看起來基本上不能算是實現(xiàn)了協(xié)程,只能算做做demo,第五種除非官方支持,否則自行改寫編譯器通用性很差。而第一種方案的 ucontext 在iOS上是廢棄了的,不能使用。那么我們使用的是第二種方案,自己用匯編模擬一下 ucontext。
模擬ucontext的核心是通過getContext和setContext實現(xiàn)保存和恢復(fù)調(diào)用棧。需要熟悉不同CPU架構(gòu)下的調(diào)用約定(Calling Convention). 匯編實現(xiàn)就是要針對不同cpu實現(xiàn)一套,我們目前實現(xiàn)了 armv7、arm64、i386、x86_64,支持iPhone真機和模擬器。
說了這么多,還是看看代碼吧,我們從一個簡單的網(wǎng)絡(luò)請求加載圖片功能來看看coobjc到底是如何使用的。
下面是最普通的網(wǎng)絡(luò)請求的寫法:
下面是使用coobjc庫協(xié)程化改造后的代碼:
原本需要20行的代碼,通過coobjc協(xié)程化改造后,減少了一半,整個代碼邏輯和可讀性都更加好,這就是coobjc強大的能力,能把原本很復(fù)雜的異步代碼,通過協(xié)程化改造,轉(zhuǎn)變成邏輯簡潔的順序調(diào)用。
coobjc還有很多其他強大的能力,本文對于coobjc的實際使用就不過多介紹了,感興趣的朋友可以去官方github倉庫自行下載查看。
我們在iPhone7 iOS11.4.1的設(shè)備上使用協(xié)程和傳統(tǒng)多線程方式分別模擬高并發(fā)讀取數(shù)據(jù)的場景,下面是兩種方式得到的壓測數(shù)據(jù)。
從上面的表格我們可以看到使用在并發(fā)量很小的場景,由于多線程可以完全使用設(shè)備的計算核心,因此coobjc總耗時要比傳統(tǒng)多線程略高,但是由于整體耗時都很小,因此差異并不明顯,但是隨著并發(fā)量的增大,coobjc的優(yōu)勢開始逐漸體現(xiàn)出來,當并發(fā)量超過1000以后,傳統(tǒng)多線程開始出現(xiàn)線程分配異常,而導(dǎo)致很多并發(fā)任務(wù)并沒有執(zhí)行,因此在上表中顯示的是大于20秒,實際是任務(wù)已經(jīng)無法正常執(zhí)行了,但是coobjc仍然可以正常運行。
我們在手機淘寶這種超級App中嘗試了協(xié)程化改造,針對部分性能差的頁面,我們發(fā)現(xiàn)在滑動過程中存在很多主線程IO調(diào)用、數(shù)據(jù)解析,導(dǎo)致幀率下降嚴重,通過引入coobjc,在不改變原有業(yè)務(wù)代碼的基礎(chǔ)上,通過全局hook部分IO、數(shù)據(jù)解析方法,即可讓原來在主線程中同步執(zhí)行的IO方法異步執(zhí)行,并且不影響原有的業(yè)務(wù)邏輯,通過測試驗證,這樣的改造在低端機(iPhone6及以下的機器)上的幀率有20%左右的提升。
簡明
易用
清晰
性能
程序是寫來給人讀的,只會偶爾讓機器執(zhí)行一下。——Abelson and Sussman
基于協(xié)程實現(xiàn)的編程范式能夠幫助開發(fā)者編寫出更加優(yōu)美、健壯、可讀性更強的代碼。
協(xié)程可以幫助我們在編寫并發(fā)代碼的過程中減少線程和鎖的使用,提升應(yīng)用的性能和穩(wěn)定性。
本文作者:淘寶技術(shù)
iOS腳本自動化打包方案--xcodebuild
本文主要xcodebuild腳本自動化打包并上傳到蒲公英或者AppStore,廢話不多說,直接上干貨!
先了解一下xcodebuild打包需要的一些指令
-workspace XXX.xcworkspace
XXX.xcworkspace需要編譯工程的工作空間名稱,如果工程不是.xcworkspace的,可以不需要-workspace XXX.xcworkspace這段話
-scheme XXX
XXX是工程名稱,-scheme XXX是指定構(gòu)建工程的名稱
-configuration Release
填入打包的方式是Debug或Release,就跟在Xcode中編譯前需要在Edit scheme的Build configuration中選擇打出來的包是Debug還是Release包一樣,-configuration就是配置編譯的Build configuration
-archivePath ./myArchivePath
配置生成.xcarchive的路徑, ./表示生成在當前目錄下,myArchivePath是生成的.Archive文件名稱
ODE_SIGN_IDENTITY=證書
配置打包的指定證書,如果該工程的Xcode已經(jīng)配置好了證書,那么不加入這段話也可以,打包出來的證書就是Xcode中配置好的。
PROVISIONING_PROFILE=描述文件UUID
配置打包的描述文件,同上,Xcode已經(jīng)配置好了就不用在填入這段話了
CONFIGURATION_BUILD_DIR
配置編譯文件的輸出路徑,如果需要用到.xcarchive文件內(nèi)部的dSYM等文件,可以使用改字段指定輸出路徑。
如果工程是勾選了Automatically manage signing,那么就不用在配置ODE_SIGN_IDENTITY和PROVISIONING_PROFILE,今天這里講到的Automatically manage signing自動配置證書,手動配置的就不多說了,有興趣的話可以自己研究。
xcode工程配置自動獲取證書,如下圖:
打包所需要文件
配置打包的ExportOptions.plist文件,可以在任意一個Xcode工程中新建一個ExportOptions.plist文件。dev和adHoc和AppStore的配置文件內(nèi)容不一樣,可以先手動打包后看下plist文件的樣式,這里提供一個樣例:
這里method對應(yīng)的value為打包對應(yīng)的環(huán)境,有development、ad-hoc、app-store、enterprise根據(jù)打包環(huán)境來配置不同的值
編譯腳本命令
xcodebuild archive -workspace XXX.xcworkspace -scheme XXX -configuration Release -archivePath ./myArchivePath CONFIGURATION_BUILD_DIR ./dir ODE_SIGN_IDENTITY=證書 PROVISIONING_PROFILE=描述文件UUID
導(dǎo)出ipa包命令
xcodebuild -exportArchive -archivePath ./myArchivePath.xcarchive -exportOptionsPlist ./ExportOptions.plist -exportPath ./out
-archivePath ./myArchivePath.xcarchive指定需要打包的.xcarchive路徑,./myArchivePath.xcarchive表示在當前終端路徑下的myArchivePath.xcarchive文件
-exportOptionsPlist ./ExportOptions.plist指定打包需要的ExportOptions.plist配置文件路徑
-exportPath ./out指定打包輸出的路徑, ./out表示打包結(jié)果輸出在終端的當前路徑下的out文件家中。如果沒有out文件夾會自動創(chuàng)建一個
腳本操作
首先:cd到需要自動打包的工程下
然后:在終端中輸入touch xcodebuild.sh創(chuàng)建xcodebuild.sh腳本文件
然后:雙擊打開腳本寫入下面 腳本內(nèi)容(請確保所有版本的plist配置文件都寫好了)
最后:在終端中輸入./xcodebuild.sh運行腳本,按照步驟完成打包選擇(如果運行的時候出現(xiàn)Permission denied,請先在終端中執(zhí)行chmod a+x *.文件的后綴名后,在運行,相當于提高腳本文件的權(quán)限)
腳本內(nèi)容
此腳本包含了自動上傳蒲公英的選擇操作,根據(jù)輸入指令來執(zhí)行具體操作
腳本實現(xiàn)
具體詳細腳本見GitHub地址: 如果好用記得給star,謝謝!
如腳本打包執(zhí)行遇到問題可留言溝通!
如果無注冊信息,需要注冊
注冊成功之后你會看到如下確認郵件的提示:
那么趕緊打開你的小郵箱驗證吧,打開郵箱看到如下:
然后復(fù)制中間的鏈接放在瀏覽器打開即可,出現(xiàn)如下提示表明驗證成功:
結(jié)果如下:
注意:
其中Pods這一項中的HJAppSpSDK表示的是我的pods上已經(jīng)有一個HJAppSpSDK項目了,如果你成功添加了現(xiàn)在的這個項目會再多一個的
進入需要配置項目目錄下也就是.git倉庫的同級目錄,創(chuàng)建一個XXX(SDK名稱).podspec的文件,最好不要直接touch一個空文件,然后直接去網(wǎng)上扒源碼,這樣會出現(xiàn)我最后面提到的問題,所以按照我的步驟來是不會出錯的:
打開vi HJAppSPSDK.podspec文件
注意問題:
上面我需要使用到的:
1s.version版本一定要跟tag一致
2s.summary不改的話會有警告
3s.description要填寫,不填寫報錯,如果嫌麻煩,可以用#注釋掉
4s.homepage填寫你的github上的項目地址
5s.license根據(jù)你github創(chuàng)建項目的時候使用的證書,一般選用MIT,后面的文件名LICENSE是谷歌創(chuàng)建的時候的文件名,你可以到你的項目中查找對應(yīng)的文件名填寫上
6s.source后面填寫github上的項目地址,請務(wù)必正確填寫
7s.resource后面的是你上傳bundle的相對路徑,我是把bundle放在FrameworkFramework目錄下的,請按照我的填寫來找到對應(yīng)你自己的填寫
8 s.ios.vendored_frameworks這一欄可能沒有,可能有,沒有就加上,這個是找到對應(yīng)framework的路勁,我是放在FrameworkFramework下的,請按照我的填寫來找到對應(yīng)你自己的填寫
9s.frameworks這個是系統(tǒng)的framework,那么我們自己的Framework里面用到了哪些系統(tǒng)的framework就加上
上面我沒有使用到的,其他的:
1s.dependency這個是填寫依賴的第三方庫,比如說AFN:
2s.requires_arc表示是否是ARC,如果是那么就打開填寫true,如下:
3s.source_files表示的是源碼文件,這個是我們的開源框架了,我們這里并沒有就沒寫,如果我們要搞開源的框架。那么路徑和我們的bundle那樣找路徑是一樣的
4s.library或者s.libraries指的是我們需要依賴系統(tǒng)的庫,lib庫,那么這個就看我們需要添加什么就寫什么。比如說我們經(jīng)常喜歡添加sqite
進入到XXX.podspec 同級目錄下
提交到Cocoapods 在項目目錄下也就是.git倉庫的同級目錄也就是現(xiàn)在的XXX.podspec文件的同級目錄下
如果出現(xiàn)如下提示,說明上傳成功了:
然后查看下pod信息:
結(jié)果如下:
創(chuàng)建項目,項目目錄下
這個時候你更新下本地的repo倉庫:
更新好之后,再查詢下
查詢結(jié)果如下:
生成Podfile 文件,修改Podfile文件,添加如下條目:
然后接下來打開白色的*******.xcworkspace文件,就能看到了pods目錄中文件了
(1)供OC、swift同時使用需要暴露方法前加‘objc’
(2)pod lib lint xxx.podspec --verbose --use-libraries --allow-warnings
本地pod檢測失敗,報如下錯誤,說明swift 庫鏈接失?。ㄥe誤如下)
需要在framework工程中修改配置(如果OC項目pod引入該framework 源文件(非xx.framework)報錯,也要檢測下這個配置是否設(shè)置為YES)
添加/移除某個庫的擁有者,上文有提到該命令。
你必須先運行過 pod trunk register 登錄過,并且操作的是你賬號擁有的庫。
3-1、注冊登錄。
在你的 Mac 上只需要運行一次,然后去郵箱中點擊確認郵件的鏈接即可,當然你也可以使用該命令在不同的賬號中來回切換。
3-2、發(fā)布庫
我一般在本地操作,PATH 一般就是 PodRepName.podspec。不過官網(wǎng)文檔上說 PATH 缺省是當前目錄,所以 cd 到庫的本地目錄,然后直接 pod trunk push 應(yīng)該也是可以滴!
3-3、查看自己的賬號信息,以及賬號擁有的倉庫。
3-4、查看某個庫的信息,包括擁有者、各版本版本號及發(fā)布時間
3-5、不贊成使用,讓某個庫過期
暫時還沒有嘗試,僅做記錄
1.在github官網(wǎng)( )注冊一個賬號;
2.登錄賬號,創(chuàng)建一個新的倉庫,如下圖
3.填寫倉庫名稱,配置倉庫相關(guān)信息
4.完成創(chuàng)建后,copy倉庫地址備用
5.在本地創(chuàng)建一個文件夾作為git本地倉庫文件夾,然后打開終端執(zhí)行以下命令
cd 到git本地倉庫文件夾中
git clone '上面copy的地址'
此時在git本地倉庫文件夾中會看到一個README文件,然后將自己的工程根目錄下的所有文件移到git本地倉庫文件夾中,然后在終端執(zhí)行以下命令
git add . //添加所有文件
git commit -m '添加了所有文件提交到本地倉庫' //提交
git push -u origin master //推送到遠程git倉庫
此時去github網(wǎng)頁查看自己提交的項目,大功告成!
如果在創(chuàng)建倉庫時,未勾選.gitignore選項,則在使用git的過程中push時,改動的文件中會頻繁出現(xiàn)UserInterfaceState.xcuserstate文件。原因就是未使用.gitignore文件(就是git軟件要忽略的文件列表,如果要忽略某些文件,在Git工作區(qū)的根目錄下創(chuàng)建一個特殊的.gitignore文件,然后把要忽略的文件名填進去,Git就會自動忽略這些文件。),如何創(chuàng)建呢?接下來用我的實際經(jīng)驗來給大家解決這個小問題咯????
cd到你的工程目錄下,然后 touch .gitignore
vi .gitigonre
project.xcworkspace
xcuserdata
UserInterfaceState.xcuserstate
project.xcworkspace/
xcuserdata/
UserInterface.xcuserstate
4.保存退出
然后執(zhí)行命令
git add .
git ommit -m '描述'
git push
成功后就不會出現(xiàn)UserInterfaceState.xcuserstate這種文件啦!
如果還是會出現(xiàn),則用以下命令
1.git status
查看當前狀態(tài),會出現(xiàn)一個modifidy: UserInterfaceState.xcuserstate文件的路徑,咱們copy這個路徑;