前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS开发笔记(四)

iOS开发笔记(四)

作者头像
落影
发布2018-04-27 17:40:11
1.1K0
发布2018-04-27 17:40:11
举报
文章被收录于专栏:落影的专栏落影的专栏

前言

最近遇到一个苦恼的问题,寻找了漫长的时间才解决。 起因是项目需要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 中的值。举一个简单的例子:

代码语言:javascript
复制
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的时候移除,并且测试的时候亦没有测出来。

代码语言:javascript
复制
- (void)dealloc {
    [[NSNotificationCenter defaultCenter] removeObserver:self];
}

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

Objective-C

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

代码语言:javascript
复制
            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:让美术回炉;

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

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

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

代码语言:javascript
复制
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo
{
    if ([UIApplication sharedApplication].applicationState == UIApplicationStateInactive) {
        [[NSUserDefaults standardUserDefaults] setObject:userInfo forKey:kUserLaunchOptions];
    }
}

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

代码语言:javascript
复制
[[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年。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016.12.29 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • xcconfig文件
  • 图片显示异常问题
  • AppStore应用生成二维码
  • 查看内购记录
  • Crash分析
  • Objective-C
  • 总结
相关产品与服务
云直播
云直播(Cloud Streaming Services,CSS)为您提供极速、稳定、专业的云端直播处理服务,根据业务的不同直播场景需求,云直播提供了标准直播、快直播、云导播台三种服务,分别针对大规模实时观看、超低延时直播、便捷云端导播的场景,配合腾讯云视立方·直播 SDK,为您提供一站式的音视频直播解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档