iOS开发笔记(三)

前言

日常开发遇到的问题记录。

JSON

Invalid type in JSON write (NSConcreteMutableData) 合法的json对象:

  • 1、顶层对象必须是NSArray或者NSDictionary;
  • 2、所有的对象必须是NSString/NSNumber/NSArray/NSDictionary/NSNull的实例;
  • 3、所有NSDictionary的key必须是NSString类型;
  • 4、数字对象不能是非数值或无穷;

内购

1、银行cnaps code查询

http://www.lianhanghao.com/

2、申请账号时,无法加入program

苹果说:

Sorry, you can’t enroll at this time. You can still develop apps and test them on iOS devices using the beta version of Xcode. Learn more

原因: 按照注册的时候填写的出生日期, 年龄未满18岁。 解决方法:

  • 重新注册apple id;
  • 在apple.com修改appid的信息;

iOS10

1、未找到应用程序的“aps-environment”的授权字符串

"getting push token failed: Error Domain=NSCocoaErrorDomain Code=3000 "未找到应用程序的“aps-environment”的授权字符串" UserInfo={NSLocalizedDescription=未找到应用程序的“aps-environment”的授权字符串}

解决方案:打开Xcode8,点击下面的地方。

2、去掉无效log并且保留原来的nslog信息

真机下设置OS_ACTIVITY_MODE会让nslog的信息消失,可以把nslog改成printf。

#define LYLog(...) printf("%f %s\n",[[NSDate date]timeIntervalSince1970],[[NSString stringWithFormat:__VA_ARGS__]UTF8String]);

Debug

1、dSYM

当把Objective-C代码编译成汇编、再转译成二进制机器码后,会生成一个dSYM文件包(内含符号表,负责翻译崩溃报告成可读代码)。 .dSYM文件是一个目录,包含一个十六进制的函数地址映射信息的文件,Debug的symbols都在这个文件中(包括文件名、函数名、行号等)。 Xcode项目每次编译后,都会生成一个新的.dSYM文件,故而真机上的崩溃日志需要检查对应的符号表。

2、crash日志分析

WAKEUPS 错误 http://stackoverflow.com/questions/25848441/app-shutdown-with-exc-resource-wakeups-exception-on-ios-8-gm 后台线程有严格的调用限制

Background threads in iOS 8 have a hard limit on how many times you can run a sleep/wake cycle on each thread per second, and having a high count here is usually an indication that something is wrong / inefficient in your thread management.

Xcode

1、Xcode断点失效

  • Clean Project
  • Clean Build Folder
  • Clear Xcode's DerivedData
  • Making sure breakpoints are enabled (Cmd Y)
  • Build Settings are set to Debug
  • Always Show Disassembly enabled and disabled
  • Debugging enabled in run config

最后发现问题出现在Xcode工程,当把老工程的文件全部添加到新工程即可断点。(老工程新建于2013年,猜测是这个原因;可惜没有找到断点失效的真正原因)

2、Xcode并存

在finder中打开应用程序,把xcode改成xcode8,再下载xcode7;

pod相关

diff: /../Podfile.lock: No such file or directory diff: /Manifest.lock: No such file or directory error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.

删除podfile.lock 和 工程,重新pod install

需要注意查看pod install的指令,反馈结果。

集成报错

1、找不到KSYGPUStreamerKit

KSYRTCStreamerKit 继承 KSYGPUStreamerKit, 但是没有引入头文件,使用的是 @class KSYGPUStreamerKit; 于是在使用KSYRTCStreamerKit 必须先导入KSYGPUStreamerKit, 再导入KSYRTCStreamerKit。 给出的demo中,头文件的引用是

#import <libksyrtclivedy/KSYRTCStreamerKit.h>
#import <libksyrtclivedy/KSYRTCStreamer.h>

#import <libksygpuliveDy/libksygpuimage.h>
#import <libksygpuliveDy/KSYGPUStreamerKit.h>

这样第三方在集成的时候,如果按照demo的头文件引入顺序,就会报奇怪的错误。

2、运行时错误

运行时报错:

dyld: Library not loaded:@rpath/GPUImage.framework/GPUImage Referenced Reason: image not found

原因是运行时没找到GPUImage 解决方案:embedd GPUImage.framework

UIWindow

UIWindow是第一个视图控件(第一个对象是UIapplication),负责展示app内容。 [self.window makekeyandvisible]可以让窗口成为主窗口,并且显示出来。 其他的view依赖于Window,Window显示出来后,view添加在Window上。 UIWindow的三个级别:WindowNormal 、Alert、StatusBar;

UIKIT_EXTERN const UIWindowLevel UIWindowLevelNormal;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelAlert;
UIKIT_EXTERN const UIWindowLevel UIWindowLevelStatusBar __TVOS_PROHIBITED;

UIAlterView的例子:alert级别;

一个普通的视图层级

总结

作为iOS开发,花在iOS的时间不是最多,反省反省反省。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏iOS技术杂谈

NSNotificationCenter 通知的使用方法详解你要知道的KVC、KVO、Delegate、Notification都在这里

你要知道的KVC、KVO、Delegate、Notification都在这里 转载请注明出处 https://cloud.tencent.com/develop...

4976
来自专栏iOS122-移动混合开发研究院

FXForms,自动生成iOS表单

1.简介 FXForms是一个简单的表单提交框架,他的作者是鼎鼎大名的 Nick Lockwood,你也许听说过他的其他的一些框架,比如 iCarousel. ...

2950
来自专栏一“技”之长

NSAlert组件应用总结 原

    在桌面软件开发中,当用户进行非法的操作或有风险的操作时,时长需要弹出警告框来提示用户。在OS X系统上,NSAlert是专门的警告框组件。其提供了简洁的...

1164
来自专栏xx_Cc的学习总结专栏

六天完成一个简单iOS App - 第三天

31411
来自专栏LinXunFeng的专栏

RxSwift + MJRefresh 打造自动处理刷新控件状态

2333
来自专栏c#开发者

Asp.net dynamic Data web Site 之二创建第一个Web Site

Asp.net dynamic Data web Site 之二创建第一个Web Site 本专题介绍一个ASP.NET动态数据的网站的布局,其中包括这些文件...

4536
来自专栏WindCoder

一个Angular 5教程:一步一步指导实现你的第一个Angular 5应用程序

现在我们可以app.component.html用这个替换:Angular是由Google开发的AngularJS框架的新版本。它带有一个完整的重写,以及各种改...

1.3K1
来自专栏数据结构与算法

My Vim

noip考完啦 不管成绩怎么样,以后不用Dev啦。 尝试一下传说中的Vim 我的Vim配置 Vim8.0 https://files.cnblogs.com/f...

6087
来自专栏编程之旅

iOS开发——多线程完成短信获取按钮倒计时

现在的APP应用中,用手机获取短信验证码是非常常见的一个功能,而往往要求的效果就是在按下获取验证码之后,验证码的按钮开始倒计时,例如30秒后重新获取。而我们如何...

1514
来自专栏一个会写诗的程序员的博客

bootstrap-table 前端分页,刷新事件代码实例

参考文档: http://bootstrap-table.wenzhixin.net.cn/

1.1K1

扫码关注云+社区

领取腾讯云代金券