❶ iOS開發WorkSpace多工程聯合編譯
先創建Workspace文件。
創建Project文件。
在創建工程的過程中有個主意點:將新建Project添加的目標和組 都是workspace。如圖4
多個工程間文件互相引用問題:多個工程間的文件引用方法:在工程A的Setting選項下的Header Search Paths 下添加「$(SRCROOT)/../B」。
這個工程A中即可引用工程B的文件,不過導入文件的方式是:#import <xxxxx.m>
如上設置,多個工程間的類就可以共享使用了。
使用 pod 問題 創建的 Podfile 文件要與 xxxWorkspace.xcworkspace 文件在同一個文件目錄下, 貼出 Podfile 文件內容。
在執行完 pod install指令後報下面的警告,則在header search paths中添加$(inherited)即可。
❷ 如何使用xcodebuild在命令行編譯iOS工程
、准備工作 1、jenkins環境。搭建jenkins環境可以參考jenkins平台搭建和配置一節。需要注意的是,雖然涉及iOS開發,但是jenkins平台卻不必搭建在mac機器上,只要在jenkins上添加mac節點就可以了。 2、iOS開發環境。iOS開發環境主要是指Xcode開發環境,Xcode是免費的,只要在蘋果應用商店裡下載一個就可以了。當然,還有重要的一點兒---開發者證書,現在個人也已經有免費的證書了,沒有證書的話,只能打模擬器用的包了。 3、git項目。強烈建議把代碼放在git上,這樣便於團隊開發。當然,不放git上也可以。 4、jenkins Xcode持續集成插件。常用的插件Xcode integration,這個插件能夠快速的幫助我們進行Xcode打包配置,當然,只用純shell腳本也是可以的。 在jenkins上打包之前,我們最好手工測試一下可以打包成功,首先用Xcode圖形界面進行測試,然後用命令行測試,如果都能打包成功就可以掛在jenkins上運行了,畢竟jenkins的原理也是通過執行一系列命令來完成的。 三、jenkins配置 1、創建一個任務,創建任務的時候最好選自由風格的軟體項目,這樣配置起來比較方便,如果有需要,也可以選擇其他的風格。 2、描述
❸ 如何把iOS代碼編譯為Android應用
看開發時使用的什麼模式。
如果是使用object C,那沒法跨平台編譯,也就無法直接轉換。
如果使用的一些支持跨平台的第三方庫,比如cocos2dx,那在安卓和ios下都是可以編譯的。
一款名為「J2ObjC」的源代碼轉換工具,可將Java語言編寫的程序轉換稱Object-C語言,並直接使用iOS框架,這意味著Android上的程序可以直接轉換成iOS App。
❹ iOS開發之條件編譯
#if (條件語句)
條件符合執行的語句
#elif (條件語句)
條件符合執行的語句
#else
所有條件不符合時,執行的語句
#endif
在條件編譯中,只編譯條件滿足時,之後的語句,其餘語句不編譯。(這里指#if和#endif之間的語句)
條件語句一般使用宏定義
例1:在iOS10及iOS10以上運行
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
#endif
例2:在宏定義DEBUG時執行執行,沒有則不執行
#define DEBUG
#ifdef DEBUG
條件符合執行的語
#endif
❺ 記錄ios項目運行、編譯的錯誤
1.Pods-xxxxxxx-resources.sh: Permission denied
解決辦法:打開項目中xx/Pods/Target Support Files/Pods-xx文件夾,cd到該目錄下
輸入終端命令:chmod a+x Pods-xx-resources.sh
chmod 用戶 操作 許可權 文件名用戶:
"a" 表示全部用戶操作
"+"表示增加許可權許可權
"x"表示可執行許可權文件名
2.Reason: image not found
首先翻譯一下字面意思:找不到圖片(鏡像)了,這里指的是名為Qucore-ThirdParty.framework尋找不到鏡像了。
查閱資料,發現framework的Status非為兩種:
Required:強引用(一定會被載入到內存)
Optional:弱引用(在被需要的時候才會被載入到內存)
在遇到錯誤,例如:ld:Library not found......的時候,說明你的某些/個Framework不應該被強引用(例如:你的某個Framework是在iOS8.0+之後可用,那如果你運行到iOS7.0的手機上,你就需要把這個Framework的Status設置為Optional)。
如果使用了Cocoapods後,且Library Binary With Libraries中沒有該FrameWork只需要將pod.FrameWork設置為Optional
註:如pod.FrameWork在Library Binary With Libraries中不存在,只需要在終端cd到項目文件夾後pod install下,就會在Library Binary With Libraries中出現。
❻ 如何編譯OpenCV進行IOS7
編譯的Xcode項目失敗,出現以下錯誤: 「缺少必需的架構arm64在文件/用戶/ * / Git/ocr/opencv2。 它運作良好,如果我改變架構(構建設置下)(ARMv7的,armv7s),而不是(ARMv7的,armv7s)。 如何更改opencv的python構建腳本,添加arm64支持opencv2。
1. micahp的回答幾乎是完美的,但錯過了模擬器版本。因此,修改平台/ IOS /到: targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
你需要下載行工具Xcode的5.0.1,然後運行 python opencv/platforms/ios/build_framework.py ios
2. 我修改了以下內容,使之建立,雖然我還沒有得到一個arm64 iOS設備進行測試的 編輯:我也只好跟著 假設「OPENCV」是包含從Github上的opencv源文件夾: 在每個gzlib.c, gzread.c, gzwrite.c位於opencv/3rdparty/zlib/地址: #include <unistd.h>
在頂部後,原有的包括。 另外開opencv/platforms/ios/cmake/Moles/Platform/iOS.cmake並從改線88: set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_32_BIT)" CACHE string "Build architecture for iOS")
到: set (CMAKE_OSX_ARCHITECTURES "$(ARCHS_STANDARD_INCLUDING_64_BIT)" CACHE string "Build architecture for iOS")
在另外改變buildscriptopencv/platforms/ios/build_framework.py在99線和100從: targets = ["iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "i386"]
到: targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386", "x86_64"]
所得到的庫將包括以下內容: $ xcrun -sdk iphoneos lipo -info opencv2
Architectures in the fat file: opencv2 are: armv7 armv7s i386 x86_64 arm64
雖然我有一個關於剩餘的關注opencv/platforms/ios/cmake/Toolchain-iPhoneOS_Xcode.cmake它定義了一個數據指針的大小為4的行14和17。它應該是8的64位我想,這樣我沒有測試過,如果庫工作arm64我會建議進一步研究在這一點上,如果它不能正常運行。
3. 嘗試等待下個月。將發布新的XCode具有更強大的32/64位支持。
4. 修改「到: def build_framework(srcroot, dstroot):
"main function to do all the work"
targets = ["iPhoneOS", "iPhoneOS", "iPhoneOS", "iPhoneSimulator"]
archs = ["armv7", "armv7s", "arm64", "i386"]
for i in range(len(targets)):
build_opencv(srcroot, os.path.join(dstroot, "build"), targets[i], archs[i])
put_framework_together(srcroot, dstroot)
❼ iOS 編譯報錯怎麼辦
1.編譯iPad真機時,選擇了 Architetures:Standard(armv6) BaseSDK:iPhoneDevice3.2 TargetDeviceFamily:iPad.
若編譯出現如下錯誤:
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1
則修改 GCC4.2CodeGeneral區域中的ComplieForThumb為非選中.
已經有了開發者證書及私鑰後,可直接在越獄的手機上調試.
2. 編譯鏈接時, "_OBJC_CLASS_$_xxx", referenced from:可能需要重新建立某個類的文件.
或者:選擇項目名,在detail列表中的target列(顯示為一個又圓圈),把這個文件的復選選中,或者再次選中.以把它加入到這個target裡面來.
3.在sdk4.0及以上使用RegexKitLite報'captureCount' was not declared in this scope錯誤,是在非.m文件中使用了它的原因.
4.there is no sdk with the name or path.
從網上down的開源代碼,結果運行的時候常出現這樣的錯,並且在deployment中沒有iosdeploymenttarget選項.
嘗試 Project/Edit Active Target/ 及 Set Active SDK菜單項,來回切換一下Active Configuration。
5. EXEC_BAD_ACCESS,EXC_BAD_INSTRUCTION錯誤,意味著這個app有內存管理的問題,一般是因為訪問野指針對象造成的。
一個和內存相關的崩潰一般很難定位到源代碼,因為這個惡魔可能很早就在程序中做了壞事了。假如一段有問題的代碼混亂了內存結構,這樣產生的蝴蝶效應可能會在之後很久才表現出來,並且總在不同的地方。所以,若有指針類型出現了不可能的變化,很可能就是因為內存結構被野指針調用混亂了。
修復一些警告後,可能就能預防一些內存錯誤。警告在左邊靠近行號的黃色三角指出一個編譯警告,你點擊那個黃色的三角形,xcode可能會彈出一個「Fix-it」的建議。
EXC_BAD_ACCESS崩潰不像SIGABRT,將不會得到很明朗的錯誤消息。然而可以使用一個讓人看到曙光的調試工具:Zombies!死亡對象工具。打開這個項目的scheme editor,選擇Run 選項,然後選擇Diagnosics標簽。勾上Enable Zombie Objects選項。當這個zombie工具被啟用之後,即使這個對象被釋放了,這個對象的內存也不會被清理。所以,那塊內存將會被標記為「長生不死的」。假如你試著之後又去使用這塊內存,這個app能夠意識到你的錯誤操作,並且app將會拋出「messagesent to daellocated instance」錯誤並且終止運行。
在工程中加入NSZombieEnabled 環境變數,並設為啟用,則在 EXC_BAD_ACCESS 發生時,XCode 的 Console 會列印出問題描述中,設置方法:雙擊Executables 下的 可執行模組,在彈出窗口中,Variables to be set in the environment,添加 NSZombieEnabled,並設定為 YES,點擊選中復選框啟用此變數。
可以再加入 MallocStackLogging 來啟用malloc記錄,以獲得更多的提示來幫助定位問題。
在gdb窗口輸入 (格式: shell malloc_history <id> <address>) shellmalloc_history1436 0x5f7fcf0, 也可以在終端中去運行 就要去掉以上的shell 指令 如 malloc_history <id> <address>
應該僅當需要調試內存時,才設置上述環境變數。
注意一點:不應該一直啟用zombie objects。因為這個工具將永遠不會釋放內存,只是簡單標記一下這個內存是不死的,你最終將會在某個時候耗盡所有的內存,因為所有分配過的內存都不會得到重用。因此應該在排查內存相關的錯誤的時候才開啟zombie objects,其他時候應該關閉它。
在xcode4中,To edit environment variables, go to Menu Proct / Edit Scheme…, select the desired configuration (you probably want 'Run') from the left sidebar first and then click on the Arguments tab. Environment variables are configurable there.
6.運行一個IPhone程序時,彈出窗口說「程序運行失敗,預置描述文件已過期」 。 解決辦法是,在Xcode中, window-> Orgnazier -> 你的iphone ->刪除帶有紅*的該程序之前的Profile 。 然後從Xcode運行該程序.
7.真機編譯時報 Code Sign error: The identity doesn't match any valid certificate/private key pair in the default keychain
修改工程和Targets的get infouild 中的code signing identity為空
8.調試列印
CFShow(coreFoundationThingy) will print out a description of coreFoundationThingy to the console. Output looks something like: {value = w:1186.000000 h:687.000000 type = kAXValueCGSizeType}
If NSLog() is printing something out as an NSCFType, try CFShow().
9. 編譯時報 Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/clang failed with exit code 1,修改C/C++ Compiler Version為gcc4.2
10.this class is not key value coding-compliant for the key viewController
可能在創建了一個基於view的工程,而後把生成的viewcontroller刪除了,但是在.xib中還有對它的引用,在IB中直接用delete鍵刪除掉它就行了。
11.這台電腦上已經存在一個名為「embedded.mobileprovision」的預置文件,您是否要替換么?
http://blog.sina.com.cn/s/blog_6907b67f0100o2vw.html
12.真機調試時報failed to upload *.app
http://hi..com/%CB%E6%B7%E7_1989/blog/item/9649f49f805f05aec8eaf466.html
http://www.shouyanwang.org/thread-462-1-1.html
13.記的release時,先置delegate為nil。
一個節點不應該保留任何對不屬於它的節點的引用。
14.模擬器
將xcode升級到4.3.1以後發現,ipad的模擬器,沒有Home鍵了。Command+Shift+H就可以實現類似點擊Home鍵的效果了。
❽ ios 怎麼選擇podfie進行編譯
iPhone何打包通用靜態庫文件(模擬器真機都用)1.先必須命令:~/Library目錄lion默認隱藏便用命令使其顯示:chflagsnohidden~/Library想再讓其隱藏:chflagshidden~/Library2.靜態庫工程建立:XcodeNew新project選擇IOS面Framework&Library面CocoaTouchStaticLibrary直接next建立MtimeLibrary工程(面功能要關注簡單2數相加)?3.工程建立刪除默認.h.m文件自創建CountNumbers..hCountNumbers..m文件圖:4.OK選擇iPhone5.1Simulator,Command+B編譯我Procts面找我編譯模擬器運行libMtimeLibrary.a文件,選擇真機(圖)再編譯真機運行libMtimeLibrary.a庫?5.libMtimeLibrary.a右鍵OpeninFinder找libMtimeLibrary.a所路徑、面我新建項目添加.a文件測試打終端:輸入命令(路徑根據自決定)cd/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Procts目錄ls看:?再輸入命令:cdDebug-iphonesimulator/通面命令查看libMtimeLibrary.a信息命令:lipo-infolibMtimeLibrary.a顯示:cashmatoMacBook-Pro:Debug-iphonesimulatorcash$lipo-infolibMtimeLibrary.ainputfilelibMtimeLibrary.aisnotafatfileNon-fatfile:libMtimeLibrary.aisarchitecture:i386i386mac架構再輸入面命令:cd../cdDebug-iphoneos/繼續通命令查看lipo-infolibMtimeLibrary.a顯示:cashmatoMacBook-Pro:Debug-iphoneoscash$lipo-infolibMtimeLibrary.ainputfilelibMtimeLibrary.aisnotafatfileNon-fatfile:libMtimeLibrary.aisarchitecture:armv7armv7iOSjia'ge架構我明白真機使用能模擬器使用吧我要做要讓libMtimeLibrary.a文件同i386armv7信息通用靜態庫文件6.新建MtimeLibraryDemo應用真機或者模擬器libMtimeLibrary.aCountNumbers.h文件引入進圖:?添加CountNumbers.h文件需要調用類面調用libMtimeLibrary.a面////AppDelegate.m//MtimeLibraryDemo////Createdbycashon12-3-23.//Copyright(c)2012__MyCompanyName__.Allrightsreserved.//#import"AppDelegate.h"#import"CountNumbers.h"@implementationAppDelegate@synthesizewindow=_window;-(void)dealloc{[_windowrelease];[superdealloc];}-(BOOL)application:(UIApplication*):(NSDictionary*)launchOptions{self.window=[[[UIWindowalloc]initWithFrame:[[UIScreenmainScreen]bounds]]autorelease];//.CountNumbers*cn=[[CountNumbersalloc]init];intcount=[cnaddTwoNumbers:10:20];NSLog(@"count:%d",count);self.window.backgroundColor=[UIColorwhiteColor];[self.windowmakeKeyAndVisible];returnYES;}7.OK編譯運行應用程序錯誤篇文檔關鍵.?我找剛才真機模擬器libMtimeLibrary.a目錄debug-iphoneos面基於arm6arm7編譯庫文件debug-iphonesimulator文件夾面基於i386編譯文件?10.關鍵步驟:通lipo-create命令合並2靜態庫文件(-output面/Users/cash/Desktop/test/libMtimeLibrary.a合並路徑文件名字)lipo-create"/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphonesimulator/libMtimeLibrary.a""/Users/cash/Library/Developer/Xcode/DerivedData/MtimeLibrary-amyqbnwwzcivnyeijggzaorseihj/Build/Procts/Debug-iphoneos/libMtimeLibrary.a"-output"/Users/cash/Desktop/test/libMtimeLibrary.a"功通命令lipo-infolibMtimeLibrary.a知道文件已經i386armv7信息cashmatoMacBook-Pro:testcash$lipo-infolibMtimeLibrary.aArchitecturesinthefatfile:libMtimeLibrary.aare:i386armv7cashmatoMacBook-Pro:testcash$w
❾ iOS 在編譯時出現 framework not found XXXX框架
iOS 在編譯時出現 framework not found xxxx框架主要是由於你在添加框架時後期移除這個框架雖然被刪除了但是還是被引用了,在Other Linker Flags中被引用,所以在編譯時就會出現找不到這個框架
這時只要進入項目的Build Settings 找到Other Linker Flags中找到你的那個XXXX框架然後刪除,重新編譯就可以成功。
❿ iOS一鍵自動編譯打包提交
在開始之前先嘮叨兩句自己對iOS自動化打包的接觸,覺得沒啥看頭滴老鐵可以略過直接從第二部分開始。項目自動打包提交的優勢不用說了,很高效便捷的東西,很早就接觸到了,但是一直沒有用到項目中,分析一下主要有以下幾個原因:
總結以上原因,一直沒有用到自動打包技術。而現在的情況是,
基於以上的情況,所以想自己寫一個自動打包的腳本,能夠實現 只運行一句命令就自動編譯打包發布 ,啥都不要做,掛著就行,打包完自動打開頁面提醒。
打包所需要的文件已經掛在 Github 上了。只需要把 BuildTool 文件夾 復制 到 項目主目錄 ,注意是復制!不是拖入項目主目錄,因為蘋果審核有屏蔽fir關鍵詞。然後打開終端, cd 到 BuildTool 文件夾,輸入 sh build.sh 命令,回車,開始執行此打包腳本。
具體的使用方法和參數配置 shell腳本 裡面已經有非常詳細的注釋。
有 AppStoreExportOptions.plist 和 AdHocExportOptions.plist 兩個plist文件,分別對應發布到AppStore和AdHoc(蒲公英、fir)。簡單說一下裡面的屬性:
寫完腳本後,發現已經有老鐵對打包腳本做了很詳細的分析了: 詳解Shell腳本實現iOS自動化編譯打包提交 。也有老鐵早就寫了iOS自動打包的腳本: xcode_shell 。
看了一下,功能也比較全,比如上傳包到自己的伺服器、上傳完成發郵件測試人員。但是現在已經有第三方平台也做到了比這更多的功能,比如蒲公英,還可以手機簡訊通知測試人員,有專門的頁面外鏈,支持持續集成等。
老鐵們如果還有什麼建議,歡迎在下面給我留言或私信。🤗 🤗 🤗
問題一(更新於2018年11月14日):
升級 Xcode 10 以上版本,蘋果採用新的構建系統,之前的 xcodebuild clean 命令已經無法使用,如果用這個命令的話會報錯,蘋果給的建議是刪除根目錄下的 build 目錄文件夾,刪除就可以完整打包了。但是每次打包都需要再刪除一遍,由於這個目錄的主要作用就是存儲 該項目的歷史構建包(Archive歸檔文件和iPA包) ,所以解決辦法是:
參考資料: build_system_release_notes_for_xcode_10