野鸟装备3.0问题汇总

最后更新于:2022-04-01 11:32:57

1、接入支付宝钱包的快捷支付SDK时,发现传给SDK的schema中不能有“_”,否则,如果是调用的支付宝钱包客户端支付,那么支付后钱包无法启动野鸟装备客户端。 2、iOS9.x中,用户在[微信](http://lib.csdn.net/base/5 "微信开发知识库")或支付宝中支付完成后,可能点击屏幕右上角的返回区域来返回到野鸟装备,这种情况下,野鸟装备是收不到支付结果的,因此采用了计时提醒的机制。 3、在开发过程中发现:当应用在前后台之间切换时,viewDidAppear、viewDidDisappear不会被调用。 4、在布局首页的抢购Item时,发现TTTAttributeLabel使用align与其它元素对齐时,会有问题,最后只能改为相对距离。
';

野鸟装备2.2版本开发问题

最后更新于:2022-04-01 11:32:55

野鸟装备iOS 2.2内测版发布了。以下是开发问题汇总,请欣赏!下载App点[这里](http://www.koulianbing.com/?p=135) ### 一、 林子的达人列表中,最近发表的3条UGC内容图片是个Button,开始时怎么都不显示图片,图片加载成功后被填充了蓝块,后来发现需要在xib中把Button的type设置为Custom才行。 ### 二、贴纸合成问题: 野鸟装备2.2新增了贴纸功能,但在贴纸完成后输出图片时发现输出的图片非常模糊。原来是使用UIView截屏的原因。使用下面的办法就可以了。 1、直接新起一张画面,把背景图和贴纸的UIImage依次渲染上去。这个比较好理解,但是操作起来比较麻烦。由于背景图的实际size与显示size有区别,在绘制贴纸时也需要考虑贴纸UIImage的缩放比例、旋转角度。 2、使用UIView drawLayer,把UIView画到画布上面去。这个最简单 ### 三、函数内的局部变量默认值问题 野鸟装备2.2版本在首页上方增加了banner,在计算banner高度时,定义了一个局部变量: CGFloatbannerHeight。结果发现Release模式下运行时,bannerHeight>0的值为YES。 切记,要赋默认值啊!  ### 四、微信登录会失败的问题 微信登录共有三步:1、调用微信客户端拿code;2、用code去换access token;3、用access token去换用户信息。 其中,2、3两步都需要和微信后台的https交互。最近这段时间,突然发现执行第3步时,ASIHttpRequest经常会出现异常: Error Domain=ASIHTTPRequestErrorDomain Code=1 "A connection failure occurred" UserInfo={NSLocalizedDescription=A connection failure occurred, NSUnderlyingError=0x13814c5e0 {Error Domain=NSPOSIXErrorDomain Code=54 "Connection reset by peer"}} 经过长时间排查,发现把ASIHTTPRequest的连接重用关掉就好了: request.shouldAttemptPersistentConnection = NO; 奇怪的是这个问题并不是必现,且目前为止找不到重现的规律,与网络类型、机型、系统均无关系。
';

野鸟装备2.1开发问题

最后更新于:2022-04-01 11:32:52

野鸟装备2.1发布了。点击[这里](http://www.koulianbing.com/?p=135)下载内测包。 1、转场动画、淡入淡出效果。 野鸟装备2.1版本开始在个人主页上方支持动态Cover,用户可以上传8张大图,在个人主页上方轮翻播放。播放过程中有一个淡入淡出的效果。实现方式很简单: 在动画播放之前,fromView挂在superView其上,toView没有superView。动画完成后,toView挂在原来fromView的superView上,而fromView则没有了superView + (void)transitionFromView:(UIView*)fromView toView:(UIView*)toView duration:(NSTimeInterval)duration options:(UIViewAnimationOptions)options completion:(void(^__nullable)(BOOLfinished))completion 2、xib与代码view共存的问题。 见野鸟装备详情页底部的三条评论、全部评论入口、评论输入框,假设该区域是一个rootView。起初,我把每个xib加载后直接给xib的顶层view重置按位置计算好的frame,然后作为子View添加在rootView中,却发现,每个xib加载后的view树都会按默认600*600的尺寸被布局和显示。后来经过多次实验,发现必须使用以下步骤才可以。 1、给每个xib加载后的view树中的顶层view,即topView,按位置计算好frame。 2、在topView套一层壳containerView,containerView的frame==topView.frame。 3、topView.frame的重设为topView.bounds。 4、把所有containerView依次添加到rootView中。 5、根据所有containerView的size,重新计算rootView的frame。 这个问题说明了xib与代码生成view共存时,需要遵守的一条规则,即,xib必须唯一嵌套在一个固定frame的parentView中,才会根据parentView的frame调整自身的frame。 2、爱自拍用到了滚动切换UITableView的控件,使用的是[https://github.com/lizelu/SliderTabBar](https://github.com/lizelu/SliderTabBar) 3、勋章的自定义View 如果需要为自定义的UIView添加子View,那么直接设置数据,并调用setNeedsLayout,然后在UIView的layoutSubview中添加子View就可以了。勋章的自定义View就是由N个UIImageView组成。 4、如何把控件高度设置为0.5? 鸟巢页各个入口之间的分隔线高度如果为1的话,看起来很粗糙,但xib无法做到高度为0.5的分隔线,最终使用代码修改constraints完成。 5、tableHeaderView的事件问题。 我在项目中使用了这句来设置Header:_tableView.tableHeaderView= headerView; 发现有时headerView的上半部分可以响应事件,但下半部分无法响应。 stackoverfllow上搜索后,发现需要设置一下:headerView.autoresizingMask=UIViewAutoresizingNone; 6、企业证书打包后,安装时下载到最后提示“无法安装” 解决方案: 1、使用“Log Guru”可以在Mac上面查看iPhone的应用安装日志。发现提示:A signed resource has been added, modified, or deleted 2、百度一下,然后把项目Clean一下,重新打包,OK。 
';

野鸟装备2.0版本审核被拒2次的原因及解决方案

最后更新于:2022-04-01 11:32:50

这次真悲催,连续被找了两次。 第一次: - 10.6 - Apple and our customers place a high value on simple, refined, creative, well thought through interfaces. They take more work but are worth it. Apple sets a high bar. If your user interface is complex or less than very good, it may be rejected - 14.3 - Apps that display user generated content must include a method for filtering objectionable material, a mechanism for users to flag offensive content, and the ability to block abusive users from the service - Information Needed Information Needed We began the review of your app but aren't able to continue because we need additional information about your app. At your earliest opportunity, please review the following question(s) and provide as much detailed information as you can. The more information you can provide upfront, the sooner we can complete your review. - What is the functionality of the feature 兑换邀请码? - Who can receive the content or service unlocked by redeeming 邀请码? - What content or service can be obtained by redeeming the 邀请码? Once you reply to this message in Resolution Center with the requested information, we can proceed with your review. -------------------------------------------------- 10.6 Details We were also required to install WeChat before we could log in using a WeChat account. The user should be able to log in and access their account, without being required to install additional applications. Next Steps If you choose to allow users to log in using a WeChat account, please use methods that can authenticate users from within your app. -------------------------------------------------- 14.3 Details Further, your app enables the display of user-generated content but does not have the required precautions in place. Next Steps It is necessary that you put all of the following precautions in place: - Require that users agree to terms (EULA) and these terms must make it clear that there is no tolerance for objectionable content - Use moderators to flag and remove inappropriate content and offensive users - Users need a mechanism to flag objectionable content and report users generating this content - Users need a mechanism to block abusive users - Developer must act on objectionable content reports within 24 hours by removing the content and ejecting the user who provided the offending content - Developer needs a method for ejecting users who violate the terms of the EULA 这里总结一下,原因有以下几个: 1、UGC功能必须提供内容过滤机制。我们的App现在对UGC是人工审核后才会上线,在提交审核时做了说明,即使这样也不行。最后,在详情页添加一个举报入口。 2、用户发布UGC前需要提示一个EULA协议。在第一次进入UGC发布界面弹出一个对话框让用户确认遵守协议,如果选择拒绝就退出界面。 3、微信登录。如果没有安装微信时,用户无法使用微信账号登录,按审核人员的说法,既然提供这个功能,就应该可以让用户在未安装微信也能使用微信账号登录。最后,把微信登录入口隐藏掉解决。 解决问题,然后附上对邀请码的解释,再次提交审核后。当天晚上就被再次审核。 第二天早上一看邮箱,再次被拒,原因如下: - 3.10 - Developers who attempt to manipulate or cheat the user reviews or chart ranking in the App Store with fake or paid reviews, or any other inappropriate methods will be removed from the iOS Developer Program 3.10 Details We noticed that your app incentivizes referrals in order to sign up new users. While rewarding the invitation sender with points or other digital content is acceptable, the person receiving the invitation should not receive any rewards for downloading or registering an account to use your app.  Incentivizing downloads has a direct influence on the App Store user reviews or chart ranking and violates the App Store Review Guidelines. Next Steps Please revise your app to remove this functionality. 由于野鸟装备2.0做了个邀请码功能:用户A分享自己的邀请码给用户B,用户B下载安装野鸟装备后,输入用户A的邀请码,两个均得金币奖励。苹果审核人员的解释时,AppStore禁止有奖励、欺骗等倾向的拉新行为,这会促使用户为了利益去下载野鸟装备,而下载量是可以影响到AppStore上面的App排行榜的。 具体到我们的邀请码机制上,可以给分享一方用户A奖励,但不能给接收方用户B奖励。 为了安全起见,我把这个功能入口直接删除了。 再次提交审核,当天上午审核通过。 
';

野鸟装备2.0问题一览

最后更新于:2022-04-01 11:32:48

2.0发布了([在这里安装内测版](http://www.koulianbing.com/?p=135))。这个大版增加了UGC功能和任务体系,开了发近两个月,碰到的问题也是最多的。 #### 下拉刷新失效。 当UITableView、UICollectionView不够一页的时候,下拉的时候都不会触发UIScrollVIew的scrollViewDidScroll代理方法。由于下拉刷新控件基于scrollViewDidScroll代理方法来实现。所以在创建UITableView、UICollectionView的时候添加:collectionView.alwaysBounceVertical = YES 就好了。//垂直方向遇到边框是否总是反弹 #### AppDelegate.window与 [UIApplication sharedApplication].keyWindow的区别 在有UIAlertView时,如果调用了keyWindow,就会出现以下异常。 Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[_UIAlertShimPresentingViewController navigationBar]: unrecognized selector sent to instance 0x7fb35b6a5c70' AppDelegate* appDelegate = (AppDelegate*)[UIApplication sharedApplication].delegate; UIWindow* window = appDelegate.window; UIWindow* keyw = [UIApplication sharedApplication].keyWindow; 在没有使用UIAlertView时,两者一样,均为我们应用的的Window,其delegate为我们的rootViewController。 在调用了UIAlertView show之后,到UIAlertView消失之前,keyw的值是UIAlertControllerShimPresenterWindow,其delegate是UIAlertShimPresentingViewController。 #### leftBarButton与rightBarButton的设置。 遵从UINavigationController的设计初衷,当UINavigationController的子VC有孙VC时,子VC的navigationItem.title,navigationItem.titleView,leftBarItems,rightBarItems等属性一定要从孙VC中获取,不要在孙VC的viewWillAppear,viewDidAppear中直接修改NavigationBar.topItem。否则,像野鸟装备的第一层TabBar拥有几个子VC的复杂情况,会在跳转过程中,发生NavigationBar上的内容显示混乱的问题,老码农吃过亏之后痛下决心梳理NavigationBar的显示逻辑,严格遵循UINavigationController的设计初衷,才从痛苦中解脱出来。 #### 关于VC跳转时结束自身导致的白屏问题。 VCA在结束当前启动新的VCB时,如果使用present切换时,会留下白屏。push时不会有。参见野鸟装备的首页。初次登录显示的是视频播放,用户点击“立即体验”后,结束自身并跳转到登录页面。一开始我的方案是直接把视频播放VC设置为rootVC,在用户点击“立即体验”时,结束自身,并present一个NavigationVC,NavigationVC的root是首页的TabVC。但这样做无论机器性能如何,始终有白屏闪现。后来改为把NavigationVC设置为rootVC,并把视频播放VC设置为NavigationVC的root,在用户点击“立即体验”时,pop视频播放VC,再push首页TabVC。这样就不会有白屏出现了。 #### NavigationVC的root在特殊情况下有默认leftBarItem的问题。 这个问题跟上面第4个问题是有关联的。在第4个问题中,白屏的问题是解决了,但首次进入时,首页TabVC的第一个子VC,也就是“鸟瞰”VC的左上角会显示系统默认的返回。 最后解决方案是给首页TabVC的几个子VC加上空的leftBarItem。 #### iOS7.0下,VC结束时回调delegate导致崩溃。 iOS7.0上,如果VC是被present出来的,当dismiss自身之后,其property都会被置为nil。这个要注意,尤其是需要回调给调用方结果的,需要先把property保存在局部变量中,再dismiss自身,再调用delegate的方法。 #### iOS7.0下无法启动新VC。 UIImagePickerController的回调方法中,如果你先dismiss UIImagePickerController,然后紧接着就要启动新的VC时,一定要小心,在iOS7.0上面,会发现启动不起来新的VC,Xcode控制台会打印:Attempt to present <XXXViewController> on <UINavigationViewController> while a presentation is in progress! 原因是启动新VC时,UIImagePickerController还没有完全dismiss掉。解决方案就是: [picker dismissViewControllerAnimated:NO completion:^{ 在这里启动新VC。 }]; #### 判断当前VC是否可见。 我这里有一个需求,是在用户分享(微信、QQ等)完成之后,需要上报分享信息。选择上报的时机就是用户完成分享,回到野鸟装备时。因为上报模块可能存在于多个VC中,这时就需要有一个逻辑判断,只有当前可见的VC才具备上报资格。如何判断,有几种方式,我选的是第三种: 1、appear和disappear之间设置BaseViewController的变量 2、判断topVC是否自己,这个要注意NavigationVC和TabBarVC的情况。 3、判断当前VC的view.window是否为nil。这个最简单。 #### UIButton设置contentMode无效。 这么搞就可以了 imageButton.imageView.contentMode = UIViewContentModeScaleAspectFill; imageButton.contentHorizontalAlignment= UIControlContentHorizontalAlignmentFill; imageButton.contentVerticalAlignment = UIControlContentVerticalAlignmentFill;  #### SDWebImage加载图片失败的问题 有一个选项,SDWebImageRetryFailed,默认是没有开启的,因此一旦图片加载失败,就不会再重试。需要把这个选项打开。
';

野鸟装备如何支持表情的

最后更新于:2022-04-01 11:32:46

目前野鸟装备App支持表情的地方有两个,一个是评论的输入和展示。一个是UGC时,装备描述的输入和展示。 对表情输入这块儿,没有做什么扩展,用户只能输入手机上的输入法所支持的表情,只要野鸟装备对用户输入的文本做编码,然后传到后台就可以了。 对展示这块儿,无论是系统字体,还是野鸟装备使用的思源字体,都是支持表情展示的,所以只要把编码后的文本做解码,然后显示就可以了。 So,只要解决编解码问题就可以了。 如参考文章所说,包含表情的文本需要使用UTF16来编码才能保证安全的存储到数据库中,野鸟装备的方案是先进行UTF16编码,再做Base64,这样数据库也不用做字符的特殊设置了。 在显示时,把数据先做Base64解码,再做UTF16解码,就可以显示了。 参考文章: emoji表情符号兼容方案:http://blog.csdn.net/qdkfriend/article/details/7576524 ios中emoji表情的判断方案:http://blog.csdn.net/liujinlongxa/article/details/44207003 
';

野鸟装备iOS版开发笔记(1.5.0)

最后更新于:2022-04-01 11:32:43

每次发版,如果不出点儿问题,反而不正常了。 1、打包时提示调用了私有API: The app references non-public symbols in yeniao: _UICreateCGImageFromIOSurface 网络上搜索,发现是Reveal.framework的问题,果然去掉,验证通过。 另外,第一次上传时,使用的1.5.0(3),解决掉上面的问题之后,第二次上传时必须把版号和build版本号修改一下,都相同的话是上传不上去的。 2、使用Settings.Bundle做了一些Debug入口,如连接线上环境还是本地测试环境,这个入口在发布时要关掉,所以发版前删除Settings.Bundle。 3、发现了系统播放器 MPMoviePlayerController的一个Bug,如果传入一个不能播放的URL,收不到MPMoviePlayerPlaybackDidFinishNotification的通知,因此无法得知状态,界面一直卡在Loading上。暂时还没有解决。 4、MPMoviePlayerController在播放的过程中,如果把程序切到后台,再切回前台时,无法自动开始播放。因此,需要手动记录一下切到后台前的播放状态,并在程序切回到前台时进行恢复。  补充于2015.10.5 今天早上收到App被AppStore拒绝的邮件,原因是在野鸟装备的商品详情页面中,用户选择把文章分享到QQ时,由于用户没有安装QQ,调起了网页版的QQ。邮件说这种体验不好。
';

iOS9适配Tip

最后更新于:2022-04-01 11:32:41

**欢迎关注老码农的微信公共账号,与CSDN博客同步 ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-30_57246173b70ac.jpg)** **手机只有先升级到8.4.1才会接收到iOS9的升级推送。XCode7.0需要去AppStore手动下载并安装。** 这篇文章对适配的技术点讲的很详细,不再啰嗦: [https://github.com/ChenYilong/iOS9AdaptationTips](https://github.com/ChenYilong/iOS9AdaptationTips) 具体到我这里,做了这几方面的工作: 1、bitcode需要关闭。否则无法编辑通过。 2、http设置。设置降级,否则我的正常Http的接口请求可以能成功,但SDWebImageCache无法请求图片,连请求都发不出去。 3、schema需要添加白名单。我这里用到了微信、微博、QQ三个分享渠道,所以把它们的schema加进来了。 这里比较蛋疼的是在iOS9上面,腾讯和新浪微博的分享SDK无法打开客户端进行分享,只能使用网页分享。没别的办法,唯有等待官方更新分享SDK了。不过好在iOS9之前的系统都可以打开客户端进行分享。 补充于2015.9.19 weibo和手机QQ分享的适配方案已经找到:点[这里](https://github.com/sinaweibosdk/weibo_ios_sdk)查看微博的方案,点击[这里](http://segmentfault.com/q/1010000003741815/a-1020000003758716)查看手机QQ的方案。 4、所有的dylib会报找不到,需要改为相同名字的tbd。  最后,还是建议大家先不用升级iOS9.0及XCode7。各种第三方库支持还没有到位,很容易出现各种各样的问题。 补充于2015.9.21 5、Archive后进行validate时报错。在IDEDistribution.standard.log中发现这么一句: <IDEDistributionIssue: severity(error), error(Error Domain=ITunesSoftwareServiceErrorDomain Code=-21013 \"The archive is invalid. 经过各种搜索,发现了这篇文章中([http://stackoverflow.com/questions/25955104/why-my-xcode-failed-to-validate-swift-ios-project](http://stackoverflow.com/questions/25955104/why-my-xcode-failed-to-validate-swift-ios-project))提到在Build Phases的“Copy Bundle Resources”中要删除无用的文件。我看了下,在我的“Copy Bundle Resources”里面找到了上一版发布时的ipa和dSYM,果然删除,validate通过。
';

野鸟装备IOS版开发笔记(1.0版本)

最后更新于:2022-04-01 11:32:39

**欢迎关注老码农的微信公共账号,与CSDN博客同步** ![](https://docs.gechiui.com/gc-content/uploads/sites/kancloud/2016-04-30_57246173b70ac.jpg) [野鸟装备](http://www.wiyeniao.com/)终于要上线了,总结一下遇到的坑,供大家品尝。 #### 调用弱引用的block属性崩溃 遇到的第一个技术性崩溃,是因为调用弱引用的block属性造成的。 通常,在block回调中,如果weakSelf已经被释放,那么调用weakSelf的方法(如:[weakSelf method])会没有任何效果。但如果是调用weakSelf的block(如:weakSelf.block()),则会崩溃。 #### UIWebView进度条处理 UIWebView的进度条无法精确计算,使用了NJKWebViewProgress框架,但这个框架效果并不太好,要么为0,要么卡在10%左右不动,然后突然一下到100%。二期会改成微信那样的展示方式,无论如何一直在动,告诉用户我在努力,而这也是进度条存在的唯一目的,因为用户不会关心到底加载了百分之几。 #### UITableView的滚动条 习惯了Android上面列表的滚动条在Cell之外的风格,看IOS上面滚动条盖在列表Cell上面真心很丑,于是试了N种方式,终于通过调整滚动条的scrollIndicatorInsets 为: UIEdgeInsetsMake(0, -5,0, -5);把滚动条调整到了Cell显示区域的右侧。 #### 引入思源字体 IOS字体实在是不怎么漂亮,借鉴大家的做法,使用了思源字体,不过压缩后11M多文件大小,真让人心疼,不过效果真的很棒。还有一个缺憾就是思源字体对decent的处理显示有问题,对于单行的Label,或者多行Label的最后一行,g的下半部分会显示不出来,这个需要自己解决一下了。我是用TTTAttributedLabel绘制时底部添加了几个点。 #### html语法支持 我们的文章详情中使用了部分html语法,我把NSAttributedString和TTTAttributedLabel进行了裁剪改造,糅合成一个控件来做支持。支持像带下划线样式的链接、文章内部分字体颜色设置、价格设置strike中划线样式等,直接把一个使用html语法的字符串扔给TTTAttributedLabel就可以了,比直接使用TTTAttributedLabel要方便很多。 #### UIScrollView的使用 我整个项目99%都是使用xib来完成的,在布局“鸟巢”时,最下面的“点击登录”在部分机器上会被Tab挡住,所以给整个页面套了一层UIScrollView,但使用xib布局时,因为UIScrollView要依赖基内容frame才能确定其属性,而xib布局又需要先放置UIScrollView,所以出现了先有鸡还是先有蛋的问题。最后百度了一把,通过给UIScrollView加了一层虚拟的ContainerView来解决此问题。 这带来了一个Bug,就是处理在“鸟巢”页面初始可见区域之下的“点击登录”的下半部分无法接收到点击事件。经过排查,发现ContainerView的userIntractEnable没有设置为YES。  补充于2015.11.13 在做野鸟装备 2.0的时候发现,ContainerView要宽和高要先在xib中设置为固定值,再在代码中动态计算调整才可以,否则还是会出现ScrollView区域之外的部分无法接收事件的问题。
';

前言

最后更新于:2022-04-01 11:32:36

> 原文出处:[野鸟装备开发笔记](http://blog.csdn.net/column/details/yeniao.html) 作者:[寇连兵](http://blog.csdn.net/a345017062) **本系列文章经作者授权在看云整理发布,未经作者允许,请勿转载!** # 野鸟装备开发笔记 > 把野鸟装备App开发过程中的遇到的问题都一一记录下来,分享给大家。
';