/
index.html
439 lines (306 loc) · 18 KB
/
index.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
<!DOCTYPE HTML>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<title>iOS移动开发周报-第9期 | 唐巧的博客</title>
<meta name="viewport" content="width=device-width, initial-scale=1,user-scalable=no">
<meta name="author" content="唐巧">
<meta name="description" content="版权说明本文为 InfoQ 中文站特供稿件,首发地址为:文章链接。如需转载,请与 InfoQ 中文站联系。 前言欢迎国内的iOS同行或技术作者向我提交周报线索,线索可以是新闻、教程、开发工具或开源项目,将相关文章的简介和链接在微博上发布并 @唐巧_boy 即可。 【摘要】:本期iOS移动开发周报带来如下内容:专门针对越狱iOS设备的盗号木马出现,iOS7下载自定义的字体功能不可用,Toll-Fre">
<meta property="og:type" content="article">
<meta property="og:title" content="iOS移动开发周报-第9期">
<meta property="og:url" content="https://blog.devtang.com/2014/04/25/ios-weekly-9/index.html">
<meta property="og:site_name" content="唐巧的博客">
<meta property="og:description" content="版权说明本文为 InfoQ 中文站特供稿件,首发地址为:文章链接。如需转载,请与 InfoQ 中文站联系。 前言欢迎国内的iOS同行或技术作者向我提交周报线索,线索可以是新闻、教程、开发工具或开源项目,将相关文章的简介和链接在微博上发布并 @唐巧_boy 即可。 【摘要】:本期iOS移动开发周报带来如下内容:专门针对越狱iOS设备的盗号木马出现,iOS7下载自定义的字体功能不可用,Toll-Fre">
<meta property="og:locale" content="zh_CN">
<meta property="article:published_time" content="2014-04-25T04:44:56.000Z">
<meta property="article:modified_time" content="2020-02-08T18:08:22.161Z">
<meta property="article:author" content="唐巧">
<meta property="article:tag" content="iOS">
<meta property="article:tag" content="唐巧">
<meta property="article:tag" content="猿辅导">
<meta property="article:tag" content="开发">
<meta name="twitter:card" content="summary">
<link rel="alternative" href="/atom.xml" title="唐巧的博客" type="application/atom+xml">
<link rel="icon" href="/img/favicon.png">
<link rel="stylesheet" href="/css/style.css">
<link rel="stylesheet" href="/%02.css">
<link rel="stylesheet" href="/.css">
<meta name="generator" content="Hexo 4.2.0"></head>
<body>
<header>
<div>
<div id="textlogo">
<h1 class="site-name"><a href="/" title="唐巧的博客">唐巧的博客</a></h1>
<h2 class="blog-motto">记录下自己学习的点滴</h2>
</div>
<div class="navbar"><a class="navbutton navmobile" href="#" title="菜单">
</a></div>
<nav class="animated">
<ul>
<ul>
<li><a href="/">首页</a></li>
<li><a href="/archives">归档</a></li>
<li><a href="/about">关于</a></li>
<li>
<form class="search" action="//google.com/search" method="get" accept-charset="utf-8">
<label>Search</label>
<input type="search" id="search" name="q" autocomplete="off" maxlength="20" placeholder="搜索" />
<input type="hidden" name="q" value="site:blog.devtang.com">
</form>
</li>
</ul>
</nav>
</div>
</header>
<div id="container">
<div id="main" class="post" itemscope itemprop="blogPost">
<article itemprop="articleBody">
<header class="article-info clearfix">
<h1 itemprop="name">
<a href="/2014/04/25/ios-weekly-9/" title="iOS移动开发周报-第9期" itemprop="url">iOS移动开发周报-第9期</a>
</h1>
<p class="article-time">
<time datetime="2014-04-25T04:44:56.000Z" itemprop="datePublished"> 发表于 2014-04-25 04:44</time>
</p>
</header>
<div class="article-content">
<div id="toc" class="toc-article">
<strong class="toc-title">文章目录</strong>
<ol class="toc"><li class="toc-item toc-level-2"><a class="toc-link" href="#版权说明"><span class="toc-number">1.</span> <span class="toc-text">版权说明</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#前言"><span class="toc-number">2.</span> <span class="toc-text">前言</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#新闻"><span class="toc-number">3.</span> <span class="toc-text">新闻</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#教程"><span class="toc-number">4.</span> <span class="toc-text">教程</span></a></li><li class="toc-item toc-level-2"><a class="toc-link" href="#开源项目"><span class="toc-number">5.</span> <span class="toc-text">开源项目</span></a></li></ol>
</div>
<h2 id="版权说明"><a href="#版权说明" class="headerlink" title="版权说明"></a>版权说明</h2><p>本文为 InfoQ 中文站特供稿件,首发地址为:<a href="http://www.infoq.com/cn/news/2014/04/ios-mobile-developmeng-weekly" target="_blank" rel="noopener">文章链接</a>。如需转载,请与 InfoQ 中文站联系。</p>
<h2 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h2><p>欢迎国内的iOS同行或技术作者向我提交周报线索,线索可以是新闻、教程、开发工具或开源项目,将相关文章的简介和链接在微博上发布并 <a href="http://weibo.com/tangqiaoboy" target="_blank" rel="noopener">@唐巧_boy</a> 即可。</p>
<p>【摘要】:本期iOS移动开发周报带来如下内容:专门针对越狱iOS设备的盗号木马出现,iOS7下载自定义的字体功能不可用,Toll-Free Bridging等。</p>
<h2 id="新闻"><a href="#新闻" class="headerlink" title="新闻"></a>新闻</h2><ol>
<li><p><a href="/2014/04/19/ios-jailbreak-trojan/">专门针对越狱iOS设备的盗号木马出现</a>:国外的iOS开发者 <a href="https://twitter.com/iOn1c" target="_blank" rel="noopener">@iOn1c</a> 发现一个来自中国的开发者”WANG XIN”签名的iOS平台的木马插件,该插件是一个名为Unflod.dylib动态链接库,可以将越狱机器上的AppleID用户名和密码盗取,并且发送到指定服务器上。<a href="http://pastebin.com/raw.php?i=QxVRd2ha" target="_blank" rel="noopener">这里</a>有该恶意插件的反汇编代码。笔者作为一个资深iOS开发者,建议一般普通用户,如果是为了用盗版软件就别越狱了,各种国内的越狱渠道都非常不安全的。如果是开发者们为了研究安全而越狱的,最好也只是在专门研究用的iTouch上使用,以避免可能的安全风险。</p>
</li>
<li><p><a href="http://weibo.com/1676354212/AFt7N5pl8" target="_blank" rel="noopener">iOS7下载自定义的字体功能不可用</a>:墨客的作者<a href="http://weibo.com/1676354212/AFt7N5pl8" target="_blank" rel="noopener">@an00na</a>发现iOS提供的下载自定义的字体功能有bug,完全不能使用。相关的Bug说明在<a href="http://openradar.appspot.com/radar?id=5881896777023488" target="_blank" rel="noopener">这里</a>。</p>
</li>
</ol>
<h2 id="教程"><a href="#教程" class="headerlink" title="教程"></a>教程</h2><ol>
<li><p><a href="http://gracelancy.com/blog/2014/04/21/toll-free-bridging/" target="_blank" rel="noopener">《Toll-Free Bridging》</a>:作者<a href="http://weibo.com/lancy1014/" target="_blank" rel="noopener">@晨钰Lancy</a>在文章中介绍Toll-Free Bridging的实现原理,以及在ARC下Toll-Free Bridging的使用场景和注意事项。</p>
</li>
<li><p><a href="https://app.yinxiang.com/shard/s16/sh/15d40ea3-7273-4701-a816-dea7edfb2140/b41319e65ca4d91d2553f2bab25b8959" target="_blank" rel="noopener">《iOS7.0到iOS7.1 UI修复》</a>:作者<a href="http://weibo.com/2271223902/B0960vL7J?ref=atme" target="_blank" rel="noopener">@白仔_wyk</a>介绍了iOS7.0下原本正常的界面在iOS7.1显示错误的问题,并且介绍了修复方法。</p>
</li>
<li><p><a href="https://www.youtube.com/watch?v=OiY1cheLpmI" target="_blank" rel="noopener">《Full Length Event - Building Paper》</a>:Facebook官方分享了介绍Paper的技术细节的视频(视频来自YouTube,需要翻墙才能观看)。视频中介绍Facebook自已实现的动画框架POP,以及如何做设计,测试,代码审核等各方面的信息。</p>
</li>
<li><p><a href="https://github.com/nixzhu/dev-blog/blob/master/2014-04-21-write-a-simple-nodejs-mongodb-web-service-for-an-ios-app.md" target="_blank" rel="noopener">《为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务》</a>:作者<a href="http://weibo.com/nixzhu" target="_blank" rel="noopener">@nixzhu</a>翻译了一个来自<a href="http://www.raywenderlich.com/61078/write-simple-node-jsmongodb-web-service-ios-app" target="_blank" rel="noopener">RW</a>的教程,介绍了如何为一个 iOS 应用编写一个简单的 Node.js/MongoDB Web 服务。在本教程中,你将学会如何搭建了一个 Node.js 环境,驱动 Express;在此平台之上,你将构建一个通过 REST API 来提供一个 MongoDB 数据库的服务器。对于iOS端,你将构建一个很酷的叫做“有趣的地方”的应用,标记有趣的位置,让其它用户能够找出他们附近有趣的地方。</p>
</li>
<li><p><a href="http://nonomori.farbox.com/post/zi-ti-jia-zai-san-chong-fang-shi" target="_blank" rel="noopener">《字体加载三种方式》</a>:作者介绍了三种加载字体的方式:静态加载、动态加载、动态下载苹果提供的多种字体。</p>
</li>
</ol>
<h2 id="开源项目"><a href="#开源项目" class="headerlink" title="开源项目"></a>开源项目</h2><ol>
<li><p><a href="https://github.com/mxcl/PromiseKit" target="_blank" rel="noopener">PromiseKit</a>:异步模式在iOS编程中非常常见。针对异步编程,业界提出了Promise的抽象(又称作Deferred模式)。通过这些一些库,开发人员能够在实际编程中使用Promise模式,每个Promise都拥有一个叫做then的唯一接口,当Promise失败或成功时,它就会进行回调。它代表了一种可能会长时间运行而且不一定必须完成的操作结果。这种模式不会阻塞和等待长时间的操作完成,而是返回一个代表了承诺的(promised)结果的对象。PromiseKit是Promise模式的iOS实现。</p>
</li>
<li><p><a href="https://github.com/intentkit/IntentKit" target="_blank" rel="noopener">IntentKit</a>:IntentKit是一个方便你处理第三方的URL Scheme的工具。</p>
</li>
</ol>
</div>
<footer class="article-footer clearfix">
<div class="article-catetags">
<div class="article-categories">
<span></span>
<a class="article-category-link" href="/categories/iOS-weekly/">iOS weekly</a>
</div>
</div>
<div class="article-share" id="share">
<div data-url="https://blog.devtang.com/2014/04/25/ios-weekly-9/" data-title="iOS移动开发周报-第9期 | 唐巧的博客" data-tsina="" class="share clearfix">
</div>
</div>
</footer>
</article>
<nav class="article-nav clearfix">
<div class="prev" >
<a href="/2014/05/06/ios-weekly-10/" title="iOS移动开发周报-第10期">
<strong>上一篇:</strong><br/>
<span>
iOS移动开发周报-第10期</span>
</a>
</div>
<div class="next">
<a href="/2014/04/18/ios-jailbreak-trojan/" title="专门针对越狱iOS设备的盗号木马出现">
<strong>下一篇:</strong><br/>
<span>专门针对越狱iOS设备的盗号木马出现
</span>
</a>
</div>
</nav>
</div>
<div class="openaside"><a class="navbutton" href="#" title="显示侧边栏"></a></div>
<div id="asidepart">
<div class="closeaside"><a class="closebutton" href="#" title="隐藏侧边栏"></a></div>
<aside class="clearfix">
<div class="sponsor">
</div>
<div class="categorieslist">
<p class="asidetitle">分类</p>
<ul>
<li><a href="/categories/books-summary/" title="books summary">books summary</a></li>
<li><a href="/categories/iOS/" title="iOS">iOS</a></li>
<li><a href="/categories/iOS-weekly/" title="iOS weekly">iOS weekly</a></li>
<li><a href="/categories/mac/" title="mac">mac</a></li>
<li><a href="/categories/shell/" title="shell">shell</a></li>
<li><a href="/categories/summary/" title="summary">summary</a></li>
</ul>
</div>
<div class="weixin">
<br />
<p class="asidetitle">微信公众号</p>
<p>关注我的微信公众号,和我一起成长:</p>
<img src="/images/weixin-qr.jpg" width="230px" />
</div>
<div class="rsspart">
<a href="/atom.xml" target="_blank" title="rss">RSS 订阅</a>
</div>
</aside>
</div>
</div>
<footer><div id="footer" >
<div class="social-font" class="clearfix">
</div>
<p class="copyright" style="margin-top: 10px;">
Powered by <a href="http://hexo.io" target="_blank" title="hexo">hexo</a> and Theme by <a href="https://github.com/wuchong/jacman" target="_blank" title="Jacman">Jacman</a> © 2020
<a href="/about" target="_blank" title="唐巧">唐巧</a>
</p>
</div>
</footer>
<script src="/js/jquery-2.0.3.min.js"></script>
<script src="/js/jquery.imagesloaded.min.js"></script>
<script src="/js/gallery.js"></script>
<script src="/js/jquery.qrcode-0.12.0.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
$('.navbar').click(function(){
$('header nav').toggleClass('shownav');
});
var myWidth = 0;
function getSize(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
};
var m = $('#main'),
a = $('#asidepart'),
c = $('.closeaside'),
o = $('.openaside');
c.click(function(){
a.addClass('fadeOut').css('display', 'none');
o.css('display', 'block').addClass('fadeIn');
m.addClass('moveMain');
});
o.click(function(){
o.css('display', 'none').removeClass('beforeFadeIn');
a.css('display', 'block').removeClass('fadeOut').addClass('fadeIn');
m.removeClass('moveMain');
});
$(window).scroll(function(){
o.css("top",Math.max(80,260-$(this).scrollTop()));
});
$(window).resize(function(){
getSize();
if (myWidth >= 1024) {
$('header nav').removeClass('shownav');
}else{
m.removeClass('moveMain');
a.css('display', 'block').removeClass('fadeOut');
o.css('display', 'none');
}
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var ai = $('.article-content>iframe'),
ae = $('.article-content>embed'),
t = $('#toc'),
ta = $('#toc.toc-aside'),
o = $('.openaside'),
c = $('.closeaside');
if(ai.length>0){
ai.wrap('<div class="video-container" />');
};
if(ae.length>0){
ae.wrap('<div class="video-container" />');
};
c.click(function(){
ta.css('display', 'block').addClass('fadeIn');
});
o.click(function(){
ta.css('display', 'none');
});
$(window).scroll(function(){
ta.css("top",Math.max(140,320-$(this).scrollTop()));
});
});
</script>
<script type="text/javascript">
$(document).ready(function(){
var $this = $('.share'),
url = $this.attr('data-url'),
encodedUrl = encodeURIComponent(url),
title = $this.attr('data-title'),
tsina = $this.attr('data-tsina'),
description = $this.attr('description');
var html = [
'<div class="hoverqrcode clearfix"></div>',
'<a class="overlay" id="qrcode"></a>',
'<a href="https://www.facebook.com/sharer.php?u=' + encodedUrl + '" class="article-share-facebook" target="_blank" title="Facebook"></a>',
'<a href="https://twitter.com/intent/tweet?url=' + encodedUrl + '" class="article-share-twitter" target="_blank" title="Twitter"></a>',
'<a href="#qrcode" class="article-share-qrcode" title="微信"></a>',
'<a href="http://widget.renren.com/dialog/share?resourceUrl=' + encodedUrl + '&srcUrl=' + encodedUrl + '&title=' + title +'" class="article-share-renren" target="_blank" title="人人"></a>',
'<a href="http://service.weibo.com/share/share.php?title='+title+'&url='+encodedUrl +'&ralateUid='+ tsina +'&searchPic=true&style=number' +'" class="article-share-weibo" target="_blank" title="微博"></a>',
'<span title="Share to"></span>'
].join('');
$this.append(html);
$('.hoverqrcode').hide();
var myWidth = 0;
function updatehoverqrcode(){
if( typeof( window.innerWidth ) == 'number' ) {
myWidth = window.innerWidth;
} else if( document.documentElement && document.documentElement.clientWidth) {
myWidth = document.documentElement.clientWidth;
};
var qrsize = myWidth > 1024 ? 200:100;
var options = {render: 'image', size: qrsize, fill: '#2ca6cb', text: url, radius: 0.5, quiet: 1};
var p = $('.article-share-qrcode').position();
$('.hoverqrcode').empty().css('width', qrsize).css('height', qrsize)
.css('left', p.left-qrsize/2+20).css('top', p.top-qrsize-10)
.qrcode(options);
};
$(window).resize(function(){
$('.hoverqrcode').hide();
});
$('.article-share-qrcode').click(function(){
updatehoverqrcode();
$('.hoverqrcode').toggle();
});
$('.article-share-qrcode').hover(function(){}, function(){
$('.hoverqrcode').hide();
});
});
</script>
<!-- Analytics Begin -->
<script type="text/javascript">
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-28029597-1', '');
ga('send', 'pageview');
</script>
<!-- Analytics End -->
<!-- Totop Begin -->
<div id="totop">
<a title="返回顶部"><img src="/img/scrollup.png"/></a>
</div>
<script src="/js/totop.js"></script>
<!-- Totop End -->
<!-- MathJax Begin -->
<!-- mathjax config similar to math.stackexchange -->
<!-- MathJax End -->
<!-- Tiny_search Begin -->
<!-- Tiny_search End -->
</body>
</html>