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 条评论
登录 后参与评论

相关文章

来自专栏Golang语言社区

从零开始创建一个基于Go语言的web service

20个小时的时间能干什么?也许浑浑噩噩就过去了,也许能看一些书、做一些工作、读几篇博客、再写个一两篇博客,等等。而黑客马拉松(HackAthon),其实是一种自...

4719
来自专栏Windows Community

About Windows 10 SDK Preview Build 17110

在 Windows Developer Day 活动同时,微软正式 Release 了 Windows 10 SDK Preview Build 17110。 ...

3544
来自专栏西城知道

ss-panel-v3-mod魔改版常用审计规则分享分享

前面我们讲了《基于宝塔搭建SS-Panel教程》、《【图文】使用SS-Panel以及怎么部署SSR后端教程》、《SS-Panel魔改面板.config.php文...

1.2K1
来自专栏Timhbw博客

分享下平时我在windows平台下开发用的一些比较好的软件-Notepad++(二)

2016-03-0923:23:39 发表评论 947℃热度 Notepad++ 它是 Windows操作系统下的一套文本编辑器(软件版权许可证: GPL),...

32713
来自专栏Wordpress专用主机|主题模板|必备插件

5款经典的WORDPRESS问答类主题模板推荐

近期,有不少WP爱好者问我:wordpress可以用来做问答类网站吗?类似于百度知道,知乎之类的。 答案是当然可以!其实wordpress也有不少优秀的问答类主...

1.9K8
来自专栏数据和云

Oracle 12.2中那些温暖人心的特性

在OOW 2015大会上,Oracle已经发布了12.2的Beta版本,其中的很多亮点新特性引人瞩目,包括在IMO和Multitenant方面,以及在Shard...

3956
来自专栏张善友的专栏

将我的 Windows Phone 应用程序更新到 Windows Phone 8

[原文发表地址]  Updating my Windows Phone App to Windows Phone 8 [中文原文地址] 将我的 Windows ...

1937
来自专栏张善友的专栏

WCF 性能基准报告

现在我能找到的关于WCF性能方面的文章主要有几个,一个是微软Connected Frameworks Team的Saurabh Gupta (PM)2007年初...

2009
来自专栏张戈的专栏

另类SEO分享:利用JS封装iframe躲过搜索引擎的抓取

前言:很多博友不仔细看完内容就直接认为用 iframe 不好之类的云云,而实际上本文就是教你在必须使用 iframe 的时候,该如何躲过搜索引擎的抓取,避免不利...

5216
来自专栏Angular&服务

关于做angular4引入echarts图表

NgxEchartsService 是全局 echarts 对象的包装器。您可以直接获取本机echarts对象或使用包装器方法。例如:

6333

扫码关注云+社区

领取腾讯云代金券