CocoaChina开发者社区

@CocoaChina2017 | CocoaChina提供开发者服务

WKWebView的使用

WKWebView的使用<p><b>前言</b><p>最近项目中的UIWebView被替换为了WKWebView,因此来总结一下。<br>示例Demo:WKWebView的使用<p>本文将从以下几方面介绍WKWebView:<p>1、WKWebView涉及的一些类<p>2、WKWebView涉及的代理方法<p>3、网页内容加载进度条的实现<p>4、JS和OC的交互<p>5、本地HTML文件的实现<p><b>一、WKWebView涉及的一些类</b><p>WKWebView:网页的渲染与展示<p>WKWebViewConfiguration:为添加WKWebView配置信息<p>WKUserScript:用于进行JavaScript注入<p>WKUserContentController:这个类主要用来做n …

国内首个完整的 Swift 服务端开源项目及详解 - 基于 Vapor 3 框架

<b>简述</b><p>这是基于 Swift 4.1 和 Vapor 3 框架的 Swift 服务端开源项目,目前文档列举的 API 已经部署在正式环境应用中,后续有新增会不断完善。<p>项目部署在 http://api.jinxiansen.com<p><b>查看</b><b>目前已完成的 API 示例文档并调试。</b><p><b>查看</b><b>Vapor 的一些基本用法。</b><p>另: 这里有几个 Vapor 部署的 H5 页面示例,你可以点击查看效果。<p>Keyboard Reboot Login Loader Color Line<p><b>使用</b><p>运行项目前的前期工作: 点击 Clone or download 下载项目。<p>基于 macOS 环境,需要安装 Xcode、 Vapor 3、MyS …

10条Swift小提示

Swift有大量有趣的语法、特性、特点,只要掌握了用法就可以利用好它们。在这篇文章中我会带你浏览我选择出的10条小提示,并附有已验证的代码供大家试用。<p><b>1.类与协议的existential</b><p>Existential类型允许我们说出想要一个类型具有哪种功能,而不用请求某些特定的东西。比如我们可以写一个接收类或子类的函数:<p>之后我们写一个函数,让它能接收符合某个协议的任意类型对象:<p>Swift允许我们让existential同时代表类与协议<p>下例中,有一个协议和一个符合该协议的类<p>之后再有一个类,并附有一个子类<p>现在我们有了一个定义东西是否CanCook的协议,和一个定义我们家里东西的类。当我们把这两个合二为一时 …

苹果发布iOS 12 beta2 包含众多新功能调整

苹果在20号正式发布了iOS 12的第二个开发者测试版本,当中对新版系统引入的许多新功能都进行了调整和修改。<p>屏幕使用时间如今加入了根据设备排序的新选项,并可根据应用程序为单位浏览额外信息;对电池用量的调整让用户可以更清楚地了解到是那些应用在耗电。<p>以下是iOS 12 beta 2当中所有改动一览。<p>电池用量 - iOS 12 beta 2对显示过去24小时电池电量和活动的图标进行了重新设计,该区域内的一些文字描述也进行了更新。<p>屏幕使用时间 - 苹果移除了清除屏幕使用时间数据的开关,从主界面中添加应用时间限额的界面也得到了调整。在第一个beta版本当中,点击某个应用会立刻将其移动到限额界面当中,但现 …

WWDC2018—What's New in Cocoa Touch

<b>前言</b><p>今日头条iOS技术团队负责翻译了今年WWDC的多篇session内容,本文由我负责翻译,想要了解更多翻译内容请看今日头条技术团队博客[ WWDC2018 ] - 来自一线开发者的技术笔记。<p><b>正文</b><p>这篇文章是对WWDC2018关于<b>Cocoa Touch新特性</b>的翻译与总结。在What's New in Cocoa Touch这个session中,主要分为三个topic来讲的,下面一个一个来看。<p><b>一、Framework updates</b><p><b>一、性能优化方面</b><p><b>1、scrolling</b><p>在iOS12中首先对scrollview的滑动做了<b>预加载数据</b>和<b>CPU计算优化</b>。主要以UITableview的加载来进行了举例。UIT …

iOS关联对象技术原理

iOS 通过 runtime 的 API 可以给分类添加属性,关联属性总共有下边3个 API<p>通过 runtime 的源码可以看出关联属性并没有添加到 category_t(分类)里边,运行时也不会合并到元类对象里边,而是存储在一个全局的AssociationsManager 里边,下边是这个 AssociationsManager 包含的层级关系.<p>所有的关联属性 和 获取关联属性 移除关联属性都是通过一个 AssociationsManager来操作,类似于 OC 中 NSFileManager 的角色,通过传递进来的对象作为地址 取出这个对象所对应的关联列表,然后通过key 取出这个关联列表 …

如何避免卡顿掉帧

本次初步讨论两个问题:<p>Native 卡顿<p>网页卡顿<p><b>Native卡顿</b><p>iOS客户端卡顿已经是老生常谈的问题了,解决方案各有千秋,大概做一个总结,不确定全部包括。<p>iPhone的屏幕刷新频率是60FPS,即16ms一次,如果在一次渲染周期内无法将当前的内容渲染完成就会出现掉帧的情况。App 主线程在 CPU 中计算显示内容,比如视图的创建、布局计算、图片解码、文本绘制等。随后 CPU 会将计算好的内容提交到 GPU 去,由 GPU 进行变换、合成、渲染。随后 GPU 会把渲染结果提交到帧缓冲区。iOS显示系统有两个缓冲区,即双缓冲机制。在这种情况下,GPU 会预先渲染好一帧放入一个缓冲区内,让视频控制器 …

Airbnb 宣布放弃使用 React Native,回归使用原生技术

昨日,Airbnb 技术团队在 Medium 上宣布,Airbnb 放弃使用 React Native,将回归到使用基于原生技术的自有框架开发 App。<p>Airbnb 表示,尽管很多团队都依赖 React Native 并计划在可预见的将来使用它,但他们最终还是无法实现最初的目标。此外,还有一些他们无法克服的技术和组织挑战,如果继续使用 React Native,这些挑战最终会变成更大的难题。<p>因此,Airbnb 宣布放弃使用 React Native,并将所有的努力重新投入到基于原生技术开发 App。<p>Airbnb 在博客中提到,当 React Native 按照预期运行时,工程师能以惊人的速度开 …

如果编程替换成中文就会怎样? 程序员看了表示头疼

首先大概的看一下中文编码:<p>你以为会写中文就会编程吗?这就像你以为会写汉字就会写出好文章一样。编程是和机器沟通,因此要用机器的语言而不是人类的语言。最早的程序就是0和1的数字,不是中文也不是英文。以前的程序员,每天写程序就是在一条长长的纸带上打孔表示0和1。后来发现0和1的二进制太麻烦了,就把0和1压缩一下,用16进制表示,比如数字10,用二进制表示是1010,用16进制表示就是0A,这样表达起来就更简洁,但是输入电脑后,仍然要转换为二进制电脑才能明白。<p>后来,科学家们用简单的英文单词表示某些功能,比如加法,就用add表示,减法就用dec表示。程序员输入add或dec后,系统会转换为对应的算法。就 …

紧急!苹果宣布部分地区竞价广告需缴税,中国开发者小心被交“苹果税”!

5 月 19 日,苹果向 Search Ads 用户发送了一封邮件,宣布包括美国、加拿大、日本、澳大利亚、中国台湾等在内的部分国家/地区的搜索广告服务需要缴税,并将于 2018 年 8 月 1 日起生效。<p>(图为苹果官方邮件截图)<p>将邮件中重点内容翻译后,发现苹果主要说了这么几个事儿:<p>苹果搜索广告服务可能受某些司法管辖区的征税,包括但不限于增值税(“VAT”)、销售和使用税、商品和服务税(“GST”)和消费税;<p>开发者有义务输入准确和最新的信息,包括所有相关的税务信息;<p>调整将于 2018 年 8 月 1 日生效,面向所有注册搜索广告并同意服务条款的客户。<p>同时,苹果竞价广告官网也进行更新,在 “hel …

[ WWDC2018 ] - 来自一线开发者的技术笔记

2018年6月4日,苹果全球开发者大会(WWDC)在美国圣何塞如期举行。今年的WWDC聚集了来自77个国家的6000多名开发者,与此同时,全球苹果开发者的数量已经超过了2千万。作为一年一度的开发者盛会,本次WWDC发布了以iOS12为代表的新版操作系统,开设了80多个session课程以及工程师现场答疑活动。今年,字节跳动也有iOS开发者代表前往美国当地现场参与了WWDC,同时iOS开发者们也就session课程进行了深入学习和总结,期待与国内的iOS开发者们共同交流。<p><b>01.发布会</b><p>本次WWDC发布了iOS12、macOS Mojave、watchOS 5以及tvOS 12在内的新版操作系统。两 …

App Store

iOS项目组件化搭建

项目组件化,顾名思义,就是将项目中的各个模块按照基础组建,功能组件,业务组件划分成一个个单独的模块,以使得各个模块间可以单独开发、测试、组合运行。<p>一般公司在天使轮后产品闭环已经确定,就需要实施组件化来应对A轮之后的业务扩张。<p>但也不是非得等到这一步才开始,如果在项目初期实施组件化,虽然代码量会有所增加,但是要把一个小项目组件化的难度也会小很多。<p><b>私有索引库</b><p>私有索引库的作用是存放.podSpec文件的。当你使用pod search AFN时,pod会在本地的索引库中进行搜索。<p>私有索引库分为本地私有索引库和远程私有索引库,它们是相互对应的。<p>本地私有索引库<p>本地索引库<p>可以发现只有一个master,这个是C …

一位麦肯锡7年老员工忠告:所谓的能力问题,全都是态度问题

马云说,他坚信一个信念:态度比能力重要。你过去的态度,决定了你现在的能力。你现在的态度,决定了你未来的能力。本文作者拥有 7 年麦肯锡咨询经验,她结合身边朋友的故事,分享了态度与能力的关系问题,希望对你有所启发。<p>职场上有句话,「TA 这是能力问题,工作态度还是好的」。<p>通常做得不够好的时候,「能力问题」似乎就比较容易得到谅解。<p>我承认,时代、机缘、天赋、性格、出身、早年教育,等等这些我们无法全然掌控的因素,关系重大,或许将我们的个人「能力」划定在某个范围内。<p>譬如,身为帝都一个普通的职场妈妈,我觉得自己大概率不能为人类飞向火星做出直接贡献了,也不能参加奥运会了。我也不敢拍胸脯保证自己现在创业能赚大钱 …

IPhone SE

WWDC18归来,急于和开发者分享第一手见闻…

近期,稳中求进的WWDC18圆满落幕了~至此,苹果的生态基本已经彻底搭建完成了。但是每年的WWDC不只有发布会,还有各种机器学习、编程架构、产品优化等技术型讲座(Sessions),这次我们邀请到了刚从WWDC回来的AppBi技术团队和他们的生态小伙伴。他们也在技术、产品、市场等领域与苹果相关部门的交流(Labs)中获得了不少最新行业讯息,iOS开发者可千万别错过了哟。另外我们还有专门给开发者的神秘好消息发布,你有耐心看到最后的话,人生没准就开挂啦~<p><b>报名沙龙请点击文末“阅读原文”</b><p>主持人<p><b>Nancy 蒋南希</b><p><b>AppBi产品市场总监</b><p>TMT行业市场公关经验,专注国内开发者海外生态,关注苹果<b>interna</b> …

WKWebView的15条应用指南

WKWebView是iOS的重要部分,在任何时间地点都能提供高性能网络渲染。<p>在这篇文章里,我汇总了15条最常用的WKWebView案例,并提供了我验证过的代码解决方案。所以如果你想解决某个具体问题,或想看看WebKit能够做些什么,请往下看!<p><b>1.让一个web view充满屏幕</b><p>有时候你会看到有人向viewDidLoad()中添加代码,创建一个web view并让它充满整个可用区域。但这样效率很低,用起来很麻烦。<p>一个简单的方法是在你的视图控制器(view controller)中像这样加入一个属性:<p>之后override loadView()方法,把它分配到你的视图控制器里:<p>这样一个专用的webVi …

iOS中堆和栈的使用

堆和栈都是一种数据项按序排列的数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。堆,队列优先,先进先出(FIFO—first in first out);栈,先进后出(FILO—First-In/Last-Out)。一般情况下,如果有人把堆栈合起来说,那它的意思是栈,而不是堆。<p><b>堆栈空间分配</b><p>1.栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量等值。其操作方式类似于数据结构中的栈。<p>2.堆区(heap):一般由程序员分配释放,若程序员不释放,则可能会引起内存泄漏。其类似于链表。<p><b>堆栈缓存方式</b><p>iOS 中应用程序使用的计算机内存不是统一分配空间,运行代码使用的空间在三个 …

iPhone SE 2 今年没戏?

如果你还在等第二代 iPhone SE,那么现在有一条坏消息。<p>据 Forbs 科技频道报道,手机壳制造商 Olixar 有消息称,5.8 英寸 iPhone XI、6.5 英寸 iPhone XI Plus 以及 6.1 英寸 iPhone 9 很可能是今年能看到的所有 iPhone 记性了。由于 iPhone 9 将会扮演那款平价机型,所以那些希望看到 4 英寸 iPhone SE 的用户可能会失望了。<p>手机壳制造商的消息有时也并不靠谱,不过 Olixar 过去确实有过几次正确的预测。但这并不表示 iPhone SE 2 项目会被砍,有可能是会延后至 2019 年再推出。<p>你在等 iPhone …

程序员:用7张图表达我对工作的“热爱”,网友:宝宝不哭

爱编程,爱晚起,偶尔也忙到深夜喜欢学习,努力工作,也享受生活,他们酷爱技术,崇尚简单的快乐和幸福,他们不是码农,他们是程序员,他们和你一样,为理想而奋斗,他们有有一个伟大愿望。是希望凭借自己的努力,净化程序员的环境,提升程序员的层次。愿IT界再无黑心企业的剥削,无人自嘲“码农”、“码畜”,技术人员受到足够尊重,写程序重新成为一种创造性的劳动。软件行业,重新成为令人羡慕的行业。自由、开放、创新、包容。<p>说到自黑,我就服程序员呀,最近在网上看到下面这七张图片,可是把我逗到了!程序员在工作中自黑已经达到新的境界了!<p>1.工作非常费力气,每个月却囊中羞涩中度过。<p>2.做项目顺风顺水是不存在的,能够按时完成就 …

细说 Swift 4.2 新特性:Dynamic Member Lookup

Swift 4.2 的新特性这两篇文章已经介绍的很清楚了:WWDC 2018:Swift 更新了什么,Swift 4.2 新特性更新。但是 4.2 中实现的 dynamic member lookup 苹果在 WWDC 上却完全没有提到。然而我认为这是一个对未来有着重要影响的特性,所以这里单独介绍一下。<p><b>语法</b><p>这个特性中文可以叫动态查找成员。在使用@dynamicMemberLookup标记了对象后(对象、结构体、枚举、protocol),实现了subscript(dynamicMember member: String)方法后我们就可以访问到对象不存在的属性。如果访问到的属性不存在,就会调用到实 …

KZWFoudation系列之Router的设计

本来是要写我自己用的router的,但是现在这个有点落后了, 所以这篇文章主要说下CTMediator这个router的设计,我觉得这个比较符合当下我对router理解。<p>它主要有一个类CTMediator,里面有3个方法,performActionWithUrl,performTarget和releaseCachedTargetWithTargetName前2个的作用主要是返回controller,后一个是清除缓存。performActionWithUrl是根据url解析出所需要的数据在调用performTarget生成controller,下面来看下performTarget这个主要方法:<p>t …

互联网巨头终极战场:得开发者得天下

<b>21世纪什么最贵?开发者。</b><p>1983 年,一批开发者受邀到加州蒙特利(Monterey)参加苹果开发者大会,这是本周二刚开幕的第25届WWDC(苹果世界开发者大会)的原点。<p>当年,开发者们有幸见证了刚诞生的Lisa 电脑。“One more thing”则是,年轻不羁的乔布斯第一次对外展示了那则一年后即将轰动全美、引起巨大争议的广告 “1984”。<p>Macintosh广告“1984”<p>*也有人认为乔布斯是在1984年的一场股东会上第一次对外展示这则广告,并发表了指责IBM的演讲。<p>广告中,一群面如死灰,动作整齐的人正在聆听屏幕上一个硕大头像的演讲:“我们思想上的统一,比世界上任何军队都强大……”与此同时 …

iPhone打电话声音太小听不清?这样设置一秒解决问题

很多人在使用iPhone打电话时,发现通话音量比较小,有时候可能会听不清对方在说什么,即使把音量调到最大也无济于事。<p>其实,我们还可以尝试通过这样设置来解决这个问题。<p>第一步,打开iPhone上的设置应用。<p>第二步,进入通用——辅助功能这个选项中。<p>最后,把“电话噪声消除”这个功能关闭,这时就会发现iPhone的通话音量有所增加了。当然,iPhone的这个功能对提升通话音质还是很有帮助的,如果当前的通话音量已经满足你的要求,那么建议还是不要关闭降噪功能。<p>此外,如果出门在外,身处嘈杂的环境中,想提高iPhone通话音量同时又想保留降噪效果的话,建议还是通过耳机来接打电话吧。<p>看到这里,觉得用苹果手机打电话 …

Cocoa开发者社区

iOS 基于MVC设计模式的基类设计

<b>前言</b><p>最近有很多小伙伴,看了笔者这篇iOS 基于MVVM + RAC + ViewModel-Based Navigation的微信开发(一)文章后反馈给笔者很多优质性的建议和意见,当然这跟当年笔者写这篇文章的初衷如出一辙,其根本目的就是拿出来和大家交流分享以及学习知道,希望可以抛砖引玉,取长补短,共同进步。再此,非常感谢大家的积极反馈和批评指导,给了笔者继续写文章的动力。<p>iOS 基于MVVM + RAC + ViewModel-Based Navigation的微信开发(一)这篇文章主要讲的是基于MVVM设计模式的基类设计,通过基类提供的API和属性来解决当前产品开发中一些常用的<b>业务逻辑</b>和<b>场景</b> …

iOS Xcode 的汇编模式切换

<b>一、概念</b><p><b>1.汇编指令</b><p>模拟器上运行的是Intel指令,而真机上运行的是arm指令,<p><b>2.每条汇编指令的格式</b><p>每条汇编指令的格式总是由操作码, 操作数1,操作数2,操作数3组成。 操作数要么就是常数,要么就是寄存储器,要么就是内存地址。你所看到的操作数中的RAX,RSI,RDI,R0,R1... 这些都是CPU中的寄存器(关于寄存器部分我将在下一篇文章中具体介绍)。而且在XCODE的左下角部分我们可以查看当前CPU中的所有寄存器的值,你可以打印并修改他们。<p>每个函数方法的第一个地址,就是这个函数的入口地址,也就是说我们进行函数调用时,实际上是让CPU跳转到这个地址并执行,更加具体的就是将ip/pc寄存器 …

今年三款新 iPhone 还没出来,但最流行是哪一款我们已经知道了

在 iPhone X 发售后的很长一段时间里,不少人对这样一款全新的 iPhone 并不看好。<p>不过,销量却能证明这个「史上变化最大」的 iPhone,它在智能手机市场上的受欢迎程度。iPhone X 不仅在中国、美国等市场中成为了销量之王,同样也在欧洲市场夺得了桂冠。<p>▲ 图片来自:BGR<p>据调研机构 Canalys 欧洲市场的数据显示,即使是在出货量同比下降了 6.3% ,仅达到 3010 万台的 2018 年第一季度,iPhone X 也占据了苹果在欧洲市场总出货量的 25%,成为了欧洲地区销量最高的机型。<p>尽管 iPhone X 的销量屡创佳绩,但期间仍有分析师认为,假如 iPhone X 的 …

Objective-C 与Swift代码转换速查手册

如果你正要从Objective-C过渡到Swift,或反过来,一个在两种语言间显示等效代码的小手册会很有帮助。本文内容就是这些:苹果开发者的红宝书,包含变量,集合,函数,类等等。<p>下面例子中,上边是Objective-C代码,下边是等效的Swift代码。必要的地方我会给一些备注来帮助理解。<p><b>变量与常量</b><p><b>创建一个变量</b><p><b>创建一个常量</b><p><b>创建一个变量数组</b><p><b>创建一个常量数组</b><p><b>向数组中添加一个值类型</b><p><b>创建一个字典</b><p><b>定义一个枚举</b><p><b>附加一串字符</b><p><b>增加数字</b><p><b>插入字符串</b><p><b>打印调试信息</b><p><b>控制流</b><p><b>检查状态</b><p><b>循环一定次数</b><p><b>在数组中循环</b><p><b>数值切换</b><p><b>函数</b><p><b>不接收参数也没有返回的函数</b><p><b>不接收参数,返回一个字符串的函数</b><p><b>接收一个字符串,返回一个字符串的函数</b><p><b>接收一个字符串</b> …

WWDC 2018 见闻

第一次去美国参加WWDC,说说见闻。<p>Keynote<p>今年WWDC亮点较少,感觉一般,点也比较散,是各种小点拼凑,没看到主旋律主方向。<p>AR占了很大篇幅,是本次WWDC的主角,会场专门有块地方去让参会者玩使用了 ARKit2 新特性多人游戏的《Swift Shot》,现场玩了下,感觉一般般,一种不会火的既视感。苹果大力发展 AR,有意作为下一个大的技术点和平台,猜想应该会有硬件上的配合,现在用 iPad/iPhone 玩 AR 着实别扭,AR 还是需要眼镜的配合才能自然用起来,期待苹果的眼镜。这次 AR 支持的图像跟踪、场景保存和真实光反射,据了解效果确实不错,做 AR 的人都会挺兴奋。<p>AI 有不小 …

程序员的35个坏习惯,你有几条?

《人月神话》出版以来,IT行业的科技公司们一直苦苦追寻传说中以一当十的超级程序员,最新的研究表明确实存在这样一小撮效率奇高的“程序金刚”,但是一位普通程序猿如何能够蜕变成代码金刚呢?<p>近日web开发专家Christian Maioli总结了导致程序猿效率低下,代码像意大利面条一样难以维护的35条恶习(归为代码组织、团队工作、写代码、测试与维护四大类)。<p><b>代码组织</b><p>1.总是说“一会弄好”,但从来不兑现。(缺乏任务管理和时间管理能力)<p>2.坚持所谓的高效、优雅的“一行代码流”,事实上,可读性才是最重要的,聪明是第二位的。<p>3.无意义的优化。(类似网页大小之类的优化最后再做)<p>4.不注重代码样式和风格的严谨。<p>5 …

iOS ShareSDK桥接技术

<b>前言</b><p>在游戏开发中,难免会出现与原生平台有交互才能完成一些特定的必要的功能。比如iOS的内购功能,或者你想用一款第三方SDK,但是此SDK却没有对应平台的版本、并且未提供插件的情况下,就会涉及到与第三方平台的交互。<p><b>Unity3D</b><p>简介:Unity3D(以下简称U3D)是由Unity Technologies开发的一个让玩家轻松创建诸如三维视频游戏、建筑可视化、实时三维动画等类型互动内容的多平台的综合型游戏开发工具,是一个全面整合的专业游戏引擎。<p><b>Unity3D调用原生iOS接口</b><p>Unity3D 无法直接调用iOS原生的OC或者swift语言,但是Unity3D使用的C#可以和C进行交互。而C是可以和O …