分类目录归档:代码 | Coding

标注一下最近的coding study

前一阵,立志再忙也要 Keep Coding,于是基本每天都会睡前看会儿文档,或者做一些练习。

想到一个有趣的便签App 的原型,比较适合练习代码,能够自定义界面,然后与 iCloud 同步。

然而掉进了一个大坑,简单标注一下。等春节闲了,再说说研究成果。:D

1.开始自然想到用 UIDocument 的方式来实现,于是翻了遍文档,写 iCloud sync 的部分的时候,发现对于一个便签来说,非常不优雅。最费解的是,如果想预览、更新 iCloud 上文档的内容时,不得不执行 document.open 操作,然后文件的修改日期就更新了,没法按照正常的修改日期排序。而且异步save时也除了很多挠头的问题。

2.于是又翻了几天 Core Data,基本弄明白了怎么工作,也写了一个简单的本地原型。后来翻了老半天也找不到如何集成 Core Data 到 iCloud,官方文档只是说可以看看 Programming Core Data with iCloud,开发者中心翻了个底朝天也没找到。

然后在一个哥们的 gitHub 上才看到,说 iOS 10 以后,相关的方法都 Dispatched 了,以后 apple 可能不支持 Core Data 对于后续 iOS 版本的 iCloud 集成。

3.今天睡前开始研究 CloudKit,但是之前 stackoverflow 上一个大哥说,CloudKit 只是针对 always online 的情况,如果断网,本地的数据不能用。如果映射一个 CloudKit 的数据到本地的 Core Data 也非常麻烦。

恩…

还是先研究一下 CloudKit 再说,如果逼到必须自己搞一个服务端…那我就先写点别的-.-

找到一篇 CloudKit 说得比较明白的入门帖,周末在家研究研究:

https://medium.com/@guilhermerambo/synchronizing-data-with-cloudkit-94c6246a3fda

 

 

为什么iOS上好的Apps多,这几天的一个视角

懒更了好久,都快忘了我还有这么个博客了😅今天睡前更了一下,也算2018写过blog了。

最近的周末和晚上,基本都Keep coding了,每天都写很多bug😅,然后看很多文档。就这周,在研究iCloud与代码的交互,快搞死了。

然后忽然想到一个显而易见的问题:为啥iOS的生态上,精致的Apps特别多,牛逼的有追求独立开发者特别多?

原因当然有很多很多。比如Apple说“赋予人们更大的能力”,还真不是拍几条人文主义TVC,在商店卖一些创造类设备而已。说Apple封闭,对于(我这种)入门开发者提供的各种API、SDK,让设备能力很容易通过代码转化为Apps的能力,比如去年开放的CoreML和ARKit,让开发者把精力可以放在Idea的层面。

然而我想说的也不是这一点(铺垫真长…)。

最近不是coding iCloud based document的部分嘛,我忽然发现,如果没有iCloud服务,想做一个支持云同步的便签,或者将用户偏好进行云同步的app,那除了做app本身的编码,我还要做什么呢?

我需要租一个虚拟主机,或者第三方云。

我需要为服务器充值续费。

我需要选网通线还是电信线。

我需要维护服务器。

我需要花一个礼拜翻php,学sql。

然后再花一个礼拜进行服务端的性能优化。

如果app火了,我要升级服务器、优化服务端。

………

其实我只不过想写一个好用的便签,并且支持云同步而已。

以上,可能是任何一个(个人)开发者都觉得再正常不过的事情了,然而好的设定,正是打破这种理所当然。

让开发者关注创意本身,做自己擅长的事情,这是一件很幸福的事情。

难怪在iOS上有IA Writter,有Day One这样能把一个小需求做得很美的Apps。

(当然关于跨平台、和iCloud本身服务性能也有很多问题,这里先说好的一面)

//我在想,如果Android在开发者生态上下功夫,会不会有另一番局面。亦或者MIUI或MIIoT,可以沿着这个思路,把特长变成规模,最后成为一门生意,会不会也是一条路径?

———

最近真是失眠严重,睡了睡了…🤮

SpriteKit 播放声音应用切换到背景时Crush解决办法

好像又好一段时间没有写结绳记事。一是因为最近没发生什么大事,第二个是最近的时间都被占满了。春节一回来,工作日忙得跟狗似的,感觉比年前那段疯狂的时间更甚。周末的时间迷上了写代码。

说到写代码,好像都是放下了快十年的爱好了。春节无聊读了读IOS编程的一些东西,得益于苹果已经把开发包装得足够简单,对于我这种十年没写过代码的人还算可以上手。边看春晚和春晚重播读了80多页的developer guide,跟读科幻小说一样欢乐。回来手痒就开始写点东西。

对于我这种初学者每写一行代码都会遇到很多问题,很感谢网络上很多大牛分享的一些学习笔记。所以决定有时间也要把我遇到的一些简单可笑的问题总结一下以示后人。当然,前提是有时间。

周末照例是装修日 + 代码日。一个恼人的bug折磨了我周六晚上好几个小时的时间,好吧 说正事儿。

=====开始说正事儿的分割线======

最近在写一个使用SpriteKit的IOS小游戏联系。在模拟器上运行都没什么问题,真机调试的时候,每次回到HOME的时候,就是applicationDidEnterBackground的时候,程序就会Crush。

报的错误是main.m中 Thread1:EXC_BAD_ACCESS(code=1,address=0x1)。网上搜了一下大概这种问题是ARC错误release的对象再次被release。花了几个小时挨个方法注释代码,终于发现当运行SKAction的-playSoundFileNamed: waitForCompletion: 方法时必出现这个错误。

后来终于在万能的SteakOverFlow找到了遇到同样问题的人,解决办法也在同一个帖子里。

答案在这里http://stackoverflow.com/questions/18976813/sprite-kit-playing-sound-leads-to-app-termination/21349677#21349677

简单的说,是因为-playSoundFileNamed: waitForCompletion: 用到了AVAudioSession类,当应用进入背景运行时,AVAudioSession 必须是非激活的,否则就会报错。然而SpriteKit在播放声音是并没有对其进行处理。解决办法也很简单,就是在应用背景运行时将AVAudioSession设置为inActive,应用回到前景时,重新设置为Active。

具体的处理方式这里就不当搬运工了,大家去看讨论原文吧。