ios編譯失敗
❶ APICloud 社區ios編譯失敗 怎麼辦
最近公司有使用APICloud發開的需求,需要我這邊提供一些模塊包得封裝。因為沒有也是剛接觸APICloud,所以也就在看官方文檔 。下面講一講我再使用過程中得一點點東西。 首先,下載官方SDK,下載最新版本的模塊開發SDK,找到裡面的MolesDevProject_iOS.zip,這裡麵包含MoleDemo、MolesDevProject和說明文件。MoleDemo是一個官方的模塊包封裝和靜態庫生成的工程。MolesDevProject則是可以讓我們自己調試的工程。 模塊類實現 2.1. 新建模塊類 新建一個UZMoleDemo類,繼承於UZMole類,其中UZMole類為模塊的基類。模塊開發過程中文件命名時提倡加前綴,以避免和其它模塊沖突。 2.2. 模塊生命周期 當前端js中調用模塊方法時,模塊首先會被初始化,引擎會調用其 - (id)initWithUZWebView:(UZWebView *)webView 方法; 當模塊所在的頁面被銷毀時,引擎會調用其 - (void)dispose 方法。 2.3. 啟動方法 如果模塊需要在應用啟動的時候就執行一些操作,那麼首先得在mole.json裡面配置launchClassMethod,例如配置的方法為launch,然後在模塊裡面實現該方法,當應用啟動時該方法就會被執行。 + (void)launch{ //在mole.json裡面配置的launchClassMethod,必須為類方法,引擎會在應用啟動時調用配置的方法,模塊可以在其中做一些初始化操作;下面代碼為注冊一個實現了UIApplicationDelegate協議方法的對象,該對象中方法就會在需要的時候被調用,通過此方式可以實現第三方應用回調url解析、推送等常用功能 //UZApphandler 基礎Object基類 可以做一些需要AppDelegate 實現的初始化 如初始化推送的AppKey等等 // UZAppHandler *appHandler = [[UZAppHandler alloc] init]; // [theApp addAppHandle:appHandler]; } 2.4. 方法調用 實現 - (void)showAlert:(NSDictionary *)paramDict 方法,用於顯示一個對話框,該方法需要在mole.json裡面配置,然後在前端js裡面才可以調用該方法。 如果前端調用該方法時傳入了一個function,那麼在這里可以通過cbId欄位獲取該function對應的id,然後在需要的時候把數據通過該function回調給js。 - (void)showAlert:(NSDictionary *)paramDict { _cbId = [paramDict integerValueForKey:@"cbId" defaultValue:-1]; NSString *message = [paramDict stringValueForKey:@"msg" defaultValue:nil]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:nil message:message delegate:self cancelButtonTitle:@"取消" otherButtonTitles:@"確定", nil]; [alert show]; } 2.5. 回調 我們在這里實現UIAlertViewDelegate中的 - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex 方法,將用戶點擊的按鈕index回調給js端,代碼如下: - (void)alertView:(UIAlertView *)alertView didDismissWithButtonIndex:(NSInteger)buttonIndex { if (_cbId >= 0) { NSDictionary *ret = @{@"index":@(buttonIndex)}; [self sendResultEventWithCallbackId:_cbId dataDict:ret errDict:nil doDelete:YES]; } } 當然,也可以定義自己的方法method,同時要修改mole.json的配置 注意不要[+]以及引號的英 漢。{ "name":"moleDemo",//模塊包名一致 "class":"UZMoleDemo",//模塊類名 "methods":["showAlert","method"],//自己定義的方法名 "launchClassMethod":"launch"//是否執行launc類方法 } 找到widget目錄下html目錄裡面的mole-con.html,我們在這裡面調用showAlert等方法,如下 var param = { msg:"Hello App!" }; var demo = api.require('moleDemo');//模塊包名稱 (mole.json 這里 模塊包名稱 三者要一致) demo.showAlert(param, callBack);//傳參數調用方法 和回調 function callBack(ret, err){ var msg; if (ret.index == 0){ msg = "點擊了第一個按鈕"; } else { msg = "點擊了第二個按鈕"; } api.toast({ msg:msg }); } 調試好了之後,把添加 修改的文件 加入MoleDemo的靜態庫工程(也可以自己創建),去掉沒用的,選擇iOS device編譯,復制靜態庫文件。 創建文件夾名稱和模塊包一致,裡面在創建target文件夾,把靜態庫文件粘貼進來,加入用到了第三方的Framework和bundle束也放進來。 target同級目錄粘貼mole.json文件,返回壓縮成zip文件. 獲取在apicloud創建的應用的Id 修改widget下config.xml 頂部的id,復制壓縮widget文件。在apicloud控制台,轉到該應用,選擇代碼部分,上傳widget.zip 跳轉模塊中自定義模塊上傳模塊包,名稱必須和模塊包名稱一致。保存 編譯,如果沒有意外,你就能掃二維碼 下載安裝你的應用到手機了。 這里默認的時apicloud提供的證書,加入要改自己的就看證書欄目,都有教程的。Mark!
❷ 集成ios的地圖sdk編譯連接失敗,求教
您好。
解壓工程後,首先打開ViewController.xib,把裡面的use auto layout的勾去掉。
如果你是在模擬器上面運行的話,
還要在build phases裡面找到link binary with libraries,
加上模擬器對應的.a文件,就可以編譯通過了。
如果還有問題,可以繼續追問,感謝。
❸ iOS 編譯報錯
你的某一個字典是不可變類型的,非法使用了setObject: forKey:這方法,解決方案:把你的字典類型改為可變的NSMutableDictionary 或者取消setObject: forKey:在個方法
❹ iOS上編譯APR出錯(Clang)
錯誤是因為APR_OFFSETOF不能用!!
你改成ivar_getOffset吧。
❺ Xcode 11.4 模擬器編譯報錯 Building for iOS Simulator was built for iOS
最近Xcode 升級到了Version 11.4 (11E146)版本。我也乘著工作間隙做了升級。
升級完成,選擇模擬器編譯,經過等待,沒有意外,出現了報錯。
Building for iOS Simulator, but the linked and embedded framework 'AipOcrSdk.framework' was built for iOS.
Building for iOS Simulator, but the linked and embedded framework 'AipBase.framework' was built for iOS.
Building for iOS Simulator, but the linked and embedded framework 'IdcardQuality.framework' was built for iOS.
讀一下內容,意思是引用的第三方庫是 build for iOS 的,不是build for iOS Simulator,這些庫還都是網路的AI識別的真機庫。
查了下蘋果論壇,看看是否有相應的解決方案,然後看到了這篇類似問題
https://forums.developer.apple.com/thread/130684
自己經過嘗試解決問題,然後總結出有2種解決方案。
猜測是Xcode 11.4 Debug模式下,對真機庫的引用做了檢查,我們在模擬器編譯的時候,可以選擇忽略這些文件,因為我們模擬器也不會真的使用這部分庫的功能。
以上,可以正常用模擬器編譯了。
❻ iOS 編譯錯誤
重復定義了啊. _OBJC_METACLASS_ 看看這個.
❼ OSChina iOS 客戶端編譯出錯,求助
有個哥們用xcode 4.5似乎解決了問題 我把Xcode重裝就好了。你也試試
❽ 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失敗求解答
美國《連線》雜志網路版今天撰文稱,蘋果即將發布的iCloud雲計算服務其實是新瓶裝舊酒,但這也表明,蘋果終於開始重視在線媒體服務業務。以下為文章全文: 多次改版 蘋果宣布,即將發布的網路媒體服務將被命名為iCloud。但不要被這個好聽地名字唬住,蘋果此前其實已經嘗試過這種服務,而採用iCloud這一全新的品牌其實是對蘋果最失敗的產品之一進行的返工。 蘋果周二就下周的全球開發者大會(WWDC)發布了官方新聞稿。除了展示Mac OS X Lion和iOS 5操作系統外,蘋果CEO史蒂夫·喬布斯(Steve Jobs)還將分享有關iCloud的細節信息,這是蘋果即將推出的一款雲計算服務。 單純根據簡要的描述信息,可以將iCloud解讀為蘋果MobileMe的後續版本,後者是一款付費個人信息同步服務,可以在多款設備間同步日程表、通訊錄、電子郵件和照片。科技行業觀察人士普遍認為,MobileMe是蘋果有史以來最糟糕的產品之一,主要是因為漏洞過多和功能匱乏。 MobileMe本身則是蘋果2008年對.Mac的改版,而2000年發布的.Mac則源於iDisk。 本次更名表明蘋果有可能已經准備好將MobileMe拓展到更為廣闊的在線存儲服務領域。美國市場研究公司NPD分析師羅斯·魯賓(Ross Rubin)相信,iCloud表明蘋果希望進軍「按需供應」(on-demand)媒體領域,並有望讓用戶通過多種上網設備訪問從iTunes中購買的音樂或電影。 魯賓說:「就媒體和集中化而言,蘋果顯然還有一個尚未挖掘的機遇。在他們收購流媒體音樂服務提供商Lala並推出按需供應的媒體服務後,這一機遇將得以擴展。」 起步較晚 與競爭對手相比,蘋果積極進軍雲計算領域的時機較晚。谷歌數年前就已經發布了一整套雲計算協作和辦公工具,該公司最近還推出了Music Beta服務,方便Android用戶訪問在線曲庫。 微軟同樣對Windows Live在線媒體服務和SkypeDrive進行了改版,並且已經與Hotmail和新一代Windows Phone 7操作系統緊密整合。另外,微軟Office套件中的部分應用也可以通過網路瀏覽器使用。 在一些規模較小的企業中,舊金山創業企業Dropbox已經成為最熱門的在線存儲解決方案之一,可以與任何計算或智能手機平台無縫整合。Dropbox過去一年間實現了爆炸式增長,注冊用戶從400萬飆升至2500萬。 相比而言,蘋果的在線媒體同步服務MobileMe卻早已「惡名遠揚」。2008年發布之初,MobileMe就出現了大量漏洞,一次宕機事故甚至導致2萬多名用戶數周無法訪問電子郵件。批評人士將這次發布稱作是「MobileMess」。 不僅如此,在MobileMe從「MobileMess」中恢復之後,仍然無法提供有說服力的服務。例如,常年關注蘋果的美國科技博客 Daring Fireball撰稿人約翰·格拉伯爾(John Gruber)就在Macworld 2010大會上表示,MobileMe的Web應用沒有太大意義,因為與Mac或iPhone中對應的本地化應用相比,這些產品並未提供任何益處。 再度發力 而現在,蘋果似乎准備在網路媒體服務領域再度發力,而且使用了全新的名字。iCloud的推出表明蘋果終於開始重視在線媒體服務了。該公司於2009年開始在北卡羅來納州建設一處50萬平方英尺(約合4.7萬平方米)的數據中心,這將為海量的數據處理提供支持。 蘋果先是在2009年收購了流媒體音樂服務提供商Lala,後於2010年將Apple TV改版為一款流媒體視頻租賃設備,這都進一步表明了蘋果在網路媒體領域的野心。 美國科技網站Data Center Knowledge編輯里奇·米勒(Rich Miller)在2009年接受媒體采訪時表示:「正在建設大型數據中心的企業也是雲計算野心最大的企業。」 NPD的羅賓認為,與雲計算領域的競爭對手類似,蘋果也將把iCloud整合為一個跨平台解決方案,像iTunes一樣充分利用iPhone、iPad和Mac的用戶優勢。 「與這兩款操作系統同步發布iCloud或許表明,蘋果將把該服務將與Mac OS X Lion和iOS 5深度整合。iCloud比以往更有機會成為Mac和iOS之間的橋梁。」他說。