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之间的桥梁。”他说。