专栏首页落影的专栏iOS开发笔记(四)

iOS开发笔记(四)

前言

最近遇到一个苦恼的问题,寻找了漫长的时间才解决。 起因是项目需要fork一个新的分支到新的git,于是把代码复制到新的git,创建git库,然后推送,一切正常。 当我把target和工程的名字修改之后,出现了一下问题:

CocoaPods did not set the base configuration of your project because your project already has a custom config set. In order for CocoaPods integration to work at all, please either set the base configurations of the target Live to Pods/Target Support Files/Pods-Live/Pods-Live.debug.xcconfig or include the Pods/Target Support Files/Pods-Live/Pods-Live.debug.xcconfig in your build configuration.

这个在更改以下设置之后,暂时修复。

在接下来的开发中,又遇到新的问题:工程无法调试

运行时发现“断点”无效,并且无法编辑时,检查一下拷贝的时候是否将build文件删除了,或将“build”文件删除再次运行即可。

网上有人遇到类似的无法断点问题,却不是相同问题。 之前的解决方案是新建一个NewLive的工程,然后把Live的文件手动添加到NewLive的工程即可。 但是这样每次复制工程的时候,都需要重新新建一次工程,再手动添加,很麻烦。 在一次脑洞大开的尝试中发现:.xcconfig文件不要导入,复制后的工程一切是正常的。

发现一切的根源是configuration中的配置。

xcconfig文件

.xcconfig 文件是一个用来保存 Build Setting 键值对的纯文本文件,这些键值对会覆盖 build setting 中的值。举一个简单的例子:

PRODUCT_NAME = Live
IPHONEOS_DEPLOYMENT_TARGET = 7.0
// 1: iPhone/iPod touch.  2: iPad.
TARGETED_DEVICE_FAMILY = 1
ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon
ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage
GCC_PRECOMPILE_PREFIX_HEADER = YES
GCC_PREFIX_HEADER = Source/Supporting Files/PrefixHeader.pch
INFOPLIST_FILE = Source/Supporting Files/Info.plist
ENABLE_BITCODE = NO

图片显示异常问题

在和美术交流的过程中,发现把mac上的工程图片压缩后传到Windows,解压结果是文件名乱码、图片无法显示; 到美术电脑调试,发现用的是WinRAR;更换其他解压软件后,文件名乱码问题解决; 图片无法显示的问题在搜索后也找到原因:

Apple在将png 图片打包加入ipa之前会将png以一种特殊格式存放,于是解压后得到的图片是之前处理过的图片,再Mac上可以打开,可能是因为mac的图集打开工具在打开这些图片时自动识别并处理了。因此解压后的图片还需要做还原处理工作还可以在其他平台上显示。 解决方案

AppStore应用生成二维码

1、在mac打开iTunes; 2、搜索对应应用,点击获取旁边的箭头,复制链接;

3、第三方二维码生成网站,生成二维码;(附生成网站

如果是实体用的二维码,建议导向的链接使用官网,由官网来分配自动跳转的地址,可控性更强。

查看内购记录

最近一个用户反馈,他购买一个588钻石,已经付款但是没有收到钻石; 后台在查看最新的充值记录里面,并没有用户对应的订单号; 用户用的是苹果的IAP,支付宝、微信也没有记录; 于是让用户提供账号密码,查询用户的内购记录再和后台进行对比,查询的步骤如下: 1、打开mac的iTunes; 2、点击上面的账户,选择查看我的账户,输入账号密码; 3、点击购买历史记录;

Crash分析

新版本上线后,在分析crash日志的时候发现,一个bug的崩溃数量急剧上升,从几个增加到几十个; 分析crash日志,崩溃在NSNotificationCenter的post,如下:

通过查看99%的用户是 OS Version: iOS 8.4 (12H143)

但是手上的测试机大都升级到iOS 10,剩下的是iOS8.1、8.2和iOS 9; 四处寻找测试机,终于弄来一个iOS 8.4版本的iphone,真机调试后发下问题: 新版本的手绘礼物,监听了钻石更新的notify,但是没有在dealloc的时候移除,并且测试的时候亦没有测出来。

- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

遵守谁注册谁移除的原则,最好还是在dealloc的状态下移除监听;

Objective-C

用UIStoryboard做UI比编辑xib更方便,但是加载比xib麻烦:

            UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Gift" bundle:nil];
            MyPurseViewController *myPurse = [storyBoard instantiateViewControllerWithIdentifier:@"MyPurseViewController"];
            myPurse.hidesBottomBarWhenPushed = YES;
            [self.navigationController pushViewController:myPurse animated:YES];

tabbar 上的按钮在点击后,图像缩小 本意是想做缩小按钮上的图片,问题代码所在 [tabBarItem setImageInsets:UIEdgeInsetsMake(6, 6, -6, -6)] 应该保证left+right=0 和 bottom+top=0;

解决方案1:加载图片前用CG重绘,缩小图片; 解决方案2:让美术回炉;

点击推送的消息,进入直播间后进行对应的操作 内存没有应用,重新加载的处理;

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    if(launchOptions) {
        NSDictionary* remoteNotification = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];
        if(remoteNotification) {
            [[NSUserDefaults standardUserDefaults] setObject:remoteNotification forKey:kUserLaunchOptions];
            NSLog(@"推送过来的消息是%@",remoteNotification);
        }
    }
}

保证在后台也能接受推送,并且打开时有处理;

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
        [[NSUserDefaults standardUserDefaults] setObject:userInfo forKey:kUserLaunchOptions];
    }
}

在适当的ViewController检查推送,进行自定义的操作。

[[NSNotificationCenter defaultCenter] addObserverForName:UIApplicationDidBecomeActiveNotification object:nil queue:nil usingBlock:^(NSNotification * _Nonnull note) {
        [self checkLuanchOption];
    }];

实际应用可能要考虑场景,比如说弹出网页的推送,需要考虑用户所在ViewController是否合适弹出;同时考虑是否弹出选择框;如果是进入直播间,要考虑当前是否正在直播间内等情况。

显示文本:Core Text 和 Core Graphics 框架根据文本生成一个位图,作为一个纹理上传到GPU并显示出来; 当滚动或者移动文本,纹理会被复用(类似光栅化) CPU绘图:基于 Quartz 2D的位图绘制; YCbCr格式:YCbCr是常见的视频数据格式,包含了三种(Y,Cb和Cr)代表颜色数据的组件; 但是更类似于通过人眼看到的颜色,人眼对 Cb 和 Cr 这两种组件的色彩度不太能精确的辨认出来,但是能很准确的识别出 Y 的亮度; 当数据使用 YCbCr 格式时,在同等的条件下,Cb 和 Cr 组件比 Y 组件压缩的更紧密。

总结

iOS开发知识较为零碎,靠死记硬背非常不合理; 像本文的.xcconfig相关的知识,就可以整合到编译、链接的知识树里面; 生成二维码、查看内购属于脑袋想一想就知道,需要二维码->二维码是链接,那么找AppStore的链接->iTunes可以查看AppStore的应用,看看是否有链接; 查看内购更是应该相信,苹果肯定是存在某种途径可以查到自己的购买信息,那么不知道就百度、google一下即可; Crash分析,有符号表,还可以断掉调试,没啥难度; 其他的零碎知识,尽量整合自己对开发的认知树里面,记不住的也没关系,我们可以搜索。

新年将近,略带忐忑的心情迎接2017年。

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

我来说两句

0 条评论
登录 后参与评论

相关文章

  • GPUImage详细解析(十三)多路视频绘制

    落影
  • Metal入门教程(八)Metal与OpenGL ES交互

    UIImage是我们常用的图像类,可以转成CVPixelBufferRef,表示存储在内存的图像数据; id<MTLTexture> 是Metal的纹理,表示...

    落影
  • GPUImage详细解析(九)图像的输入输出和滤镜通道

    前言 GPUImage系列解析已经接近尾声,这次介绍的是: 纹理输入输出GPUImageTextureOutput 和 GPUImageTextureOutpu...

    落影
  • 自动化测试selenium在小公司的成功实践

    顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscr...

    小老鼠
  • 046|为什么要采用自动化仓储物流系统?

    相信很多人看过京东最近推广的一个新闻:位于东莞的新一代的“亚洲一号”在2019年12月18日正式投入使用。目前是亚洲最大规模的一体化智能物流中心。“东莞...

    老King
  • QT 关于int、double、string、QString格式相互转换的方法

    acoolgiser
  • 【实用】教你如何改造 zblog MIP 模板

    很多人都问过我,咖啡你的 MIP 主题模板到底怎么改的。我就和 zblog 那些开发者交流了下。zblog的MIP改造非常简单。今天就免费给大家献上改造方案,希...

    潘嘉兴
  • 【蓝桥杯】BASIC-8 回文数

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 ...

    喜欢ctrl的cxk
  • 手把手带你做推荐(一):推荐分类和样本构造

    继上篇《个性化推荐101》之后,同学们反馈还不够详细,可能对没有做过推荐的同学初上手还是不知所措,故根据自己的经验分三篇出一个系列更加详细的指导文档,一步步带大...

    窦融
  • 探索PHP7(一)--性能

    #探索PHP7(一)--性能# ? ##前言## 在2015年12月2号,鸟哥的在开源中国发布的新闻写在 PHP 7 发布之际一些话,小编意识到从8月份发布第一...

    喵了个咪233

扫码关注云+社区

领取腾讯云代金券