Tag: iOS App开发

CocoaPods插件开发入门

2013年发布的CocoaPods插件成为功能强大且优雅的工具,可通过有用的调整和命令来扩展CocoaPods。 我们已经构建了一个简单的CocoaPods插件,该插件可在团队成员之间同步git hook,并希望分享我们的开发经验,以便您可以根据自己的需要制作一个。 CocoaPods插件是Ruby gem,您需要安装Ruby和CocoaPods才能开始开发插件。 要开始开发新插件,您还需要通过运行以下命令安装cocoapods-plugins gem: $ gem install cocoapods-插件 为了演示和调试,让我们使用git仓库创建一个新的Xcode项目: Xcode>文件>新建>项目>单视图应用程序,不要忘了选中“ 创建git存储库”或通过运行以下命令手动创建它: $ git init 现在我们可以将Pod添加到我们的项目中: $ pod init 或使用我们制作的演示项目来开发cocoapods-githooks插件。 现在是时候通过运行来创建我们的新插件了 $ pod插件创建了githooks 在本教程中,我们使用与插件相同的名称。 除非您将无法发布具有相同名称的插件,否则不会有任何区别。 此命令为CocoaPods插件创建样板。 .gemspec文件是我们插件的主要配置文件。 所有spec字段都是自描述的(您可以在此处查看我们插件的gemspec),但是我想指出一件事: 默认情况下, spec.files引用git存储库索引和工作树中的所有文件。 但是,如果您尝试在git中没有文件的情况下构建gem,则将得到一个空的.gem文件,没有警告或错误。 我的建议是将spec.files的值设置为Dir [‘lib / ** / *’] ,它将引用lib目录中的所有文件。 将spec.files行替换为 spec.files = Dir [‘lib / ** / *’] Gemfile包含执行关联所需的所有gem依赖项 Ruby代码。 有关更多信息,请查看Bundler文档。 Rakefile包含测试规范的参考, spec文件夹包含测试规范。 有关Rake的更多信息,请访问Rake官方仓库。 […]

iOS中的测试驱动开发,SWIFT 4-第2部分

该博客是我在iOS上的“测试驱动开发”的第一个博客的延续。 请对此进行深入了解。 如果仍然如此,您会为此感到懒惰,那么您可以下载此博客UT_Starter2的入门项目并继续。 让我们回想一下我们正在建立的用于DemoTestsProject的UML图。 因此,让我们写下测试用例。 在进行单元测试时,我们应牢记的重要一件事是,我们应始终尝试测试我们的公共方法和属性,而避免测试私有方法和属性。 等待。 什么!!! 你是认真的家伙吗? 原因是公共方法和属性是我们向外界公开的内容,并且不希望它们出错。 关于此有一个很棒的堆栈对话。 请随时查看。 为了显示位置列表,我们使用表格视图。 因此,参考我们的UML图,我们有一个PlaceTableCell 代表对应于单元格的UITableViewCell类。 PlaceTableCell 使用PlaceCellDataModel的数据模型 键入以链接其UI。 因此,我们将测试数据模型是否正确设置了属性。 导航到PlaceCellDataModel.swift 并准备您的测试课程,如下所示: 让我们首先写下模拟DataFetcher。 导航到PlaceListViewModelTests 并将以下代码粘贴到类声明之外,除非您希望一个类位于另一个类中。 😉 祝贺您的模块成功进行单元测试。 编写业务逻辑测试用例。 模拟数据。 模拟数据获取层。 遵循TDD概念并构建代码。 示例代码:您可以在DemoTests Repo的Final文件夹中找到完成的项目。 您可以通过以下渠道与我联系,以获取任何查询,反馈或只是想进行讨论: Twitter — @G_ABHISEK 领英 堆栈溢出 邮件 abhisekbunty94@gmail.com 为了立即连接 SkypeId — gabhisekbunty 请随时与您的其他开发人员分享。

[iOS] [Swift]自定义UIcollectionView

最近开始有机会用到UIcollectionView,就来做一下笔记吧,个人本来认为它跟UItableView蛮像的,但实际做起来还是有一些区别。 直接开始吧!先拉个集合查看到故事板上面并设置好约束, collectionView左上角有内建一个cell,在这里不会用到所以可以直接删除掉,或者在下图右边的Collection查看项目将1改成0。 拉好后马上设定delegate,在文档大纲视图中,选择集合视图再重新按下ctrl +左键拖曳到viewController,选择delegate,再重复一次选择数据源。(当然用代码设定也是可以,看个人喜好) 接下来要设定我们想要自定的cell的格式,我本来是使用内建的cell再去修改的,但后来发现xib似乎比较好用,所以就用xib来创建cell,也可以顺便学一下xib 。 先New一个Cocoa Touch Class,子类为UICollectionViewCell,XIB那栏要打勾。 创建好之后就会多出xib档案和swift档,那先来设计我们的cell吧。先在cell里面拉一个视图出来。 设定View的约束条件,这边宽度要记得重置因为后面会用到,AspectRatio我也有勾。 接下来再把需要的元件拉进去并排好位置 再来设定各元件的约束,设定完后可以调整视图的背景色,可以帮助理解单元格的正确显示区域。 再来单击最上层的我的收藏夹视图单元格,在右边显示属性检查器的第一个收藏夹可重用视图栏位填上自己设置的标识符名称,像这边设定成myCell的话,文档大纲视图的我的收藏夹视图单元格就会改名成myCell。 接下来要建立xib和myCollectionViewCell.swift档案之间的连结,在该档案加入以下的代码: 到这里就完成xib的设定了,此时应该会会想要忍不住Run一下程式,但很不幸的crash了,这是因为viewController那边还有很多地方未设定。 回到ViewController.swift,给StoryBoard上的收藏视图设置ㄧ个插座 iPhone SE 大尺吋平板和最小手机都试过了,经过以萤幕宽度的计算,来达到一次显示两行单元,而且大小会自动缩放,那其他型号应该也没问题了吧! 范例档网址: ttyUSB0978 / customCollectionViewTest customCollectionViewTest – https://medium.com/@ttyUSB0978/ios-swift-custom-uicollectionview-880df6abcc51 github.com 参考资料: UICollectionView具有在iOS 9和10中使用自动布局自动调整单元格大小的功能 相关资料: WWDC2016会议笔记— iOS 10 UICollectionView新特性 Swift —圆形图片的生成及显示(两种方式) Swift:用UICollectionView整一个瀑布流 PS。 demo用的图片是我之前在网路上收集的,如果作者看到觉得不OK请通知我,我再换掉

如何在Swift中构建QR Code Scanner App

那么,什么是QR码? 我相信大多数人都知道QR码是什么。 如果您还没有听说过,请看一下上面的图片-这是一个QR码。 QR(快速响应的缩写)代码是由电装公司开发的一种二维条形码。 QR码最初是为跟踪制造中的零件而设计的,近年来,它已在消费者空间中流行,作为一种编码着陆页URL或营销信息的方式。 与您熟悉的基本条形码不同,QR码包含水平和垂直方向的信息。 因此,这有助于其以数字和字母形式存储大量数据的能力。 我不想在这里进入QR码的技术细节。 如果您想了解更多信息,可以访问QR码的官方网站。 随着iPhone和Android手机的普及,QR码的使用已大大增加。 在某些国家/地区,QR码几乎可以找到。 它们出现在杂志,报纸,广告,广告牌,名片甚至食物菜单中。 作为iOS开发人员,您可能想知道如何才能让您的应用程序读取QR码。 在iOS 7之前,您必须依靠第三方库来实现扫描功能。 现在,您可以使用内置的AVFoundation框架实时发现和读取条形码。 创建用于扫描和翻译QR码的应用从未如此简单。 快速提示:您可以生成自己的QR码。 只需访问http://www.qrcode-monkey.com 我们将要构建的演示应用程序非常简单明了。 但是,在继续构建演示应用程序之前,必须了解iOS中的任何条形码扫描(包括QR码扫描)完全基于视频捕获,这一点很重要。 这就是在AVFoundation框架中添加条形码扫描功能的原因。 请记住这一点,因为它将帮助您理解整个章节。 那么,演示应用程序如何工作? 看看下面的截图。 这是应用程序用户界面的外观。 该应用程序的工作原理与视频捕获应用程序非常相似,但是没有录制功能。 启动该应用程序后,它将利用iPhone的后置摄像头来识别QR码并自动对其进行识别。 解码信息(例如URL)显示在屏幕底部。 就这么简单。 要构建该应用程序,您可以从http://www.appcoda.com/resources/swift42/QRCodeReaderStarter.zip下载项目模板开始。 我已经预先构建了情节提要,并为您链接了消息标签。 主屏幕与QRCodeViewController类相关联,而扫描仪屏幕与QRScannerController类相关联。 您可以运行入门项目来看看。 启动应用程序后,您可以点击“扫描”按钮以调出扫描视图。 稍后,我们将实现此视图控制器以进行QR码扫描。 现在您已经了解了入门项目的工作原理,让我们开始并在应用程序中开发QR扫描功能。 我已经在项目模板中创建了该应用程序的用户界面。 UI中的标签用于显示QR码的解码信息,并且与QRScannerController类的messageLabel属性关联。 如前所述,我们依靠AVFoundation框架来实现QR码扫描功能。 首先,打开QRScannerController.swift文件并导入框架: 完成编辑后,请部署应用程序并再次在真实设备上运行它。 轻按扫描按钮应调出内置相机并开始捕获视频。 但是,此时,消息标签和顶部栏已隐藏。 您可以通过添加以下代码行来修复它。 这将移动消息标签和顶部栏,使其显示在视频层的顶部。 启动后,点击扫描按钮,然后将设备指向图11.4中的QR码。 该应用程序立即检测到代码并解码信息。 本文首次发布在AppCoda.com上,是《 iOS 12使用Swift编程》一书的示例章节。 在社交媒体平台上关注我们: 面子书:facebook.com/AppCodamobile/ Twitter:twitter.com/AppCodaMobile Instagram的:instagram.com/AppCodadotcom […]

上App Store!

我们位于App Store中! 查看我们,立即下载,并开始探索众包排名的世界! 描述 Trendendo是一个平台,可让您对重要的事情进行投票,跟踪社区的观点并与列表互动以进行您可以想象的任何事情。 简单来说,就是生命。 排名。 投票。 –无论是最佳NBA球员,最喜欢的跑鞋品牌,最重要的选举问题还是最伟大的吉他手,都可以对重要的问题和跨越一生的辩论进行投票 –借助互动体验,只需轻按几下即可为卡注册您的选票 探索。 –作为众包排名的中心,请在您的供稿中浏览感兴趣的卡片,并查看您的社区对广泛主题的看法 –从企业到消费者,技术到生活方式,体育到娱乐等13个类别,Trendendo都可以提供几乎所有内容的视角 跟踪。 –打开任何卡片的“排名”标签,并探索您的收藏夹位置随时间的变化 –通过反映实时趋势脉动的提要,您始终可以连接到相关内容 –一个平台,它比冗长的评论,有思想的评论者和无休止的通知更注重效率和答案 连接。 –导入您的Facebook朋友以建立您的社交圈 –搜索感兴趣的人,以查看他们对哪些卡和类别进行投票 在一个渴望速度和引人入胜的内容的世界中,Trendendo消除了混乱,为您提供了相关,有用和有趣的体验。 立即下载以留下您的印记,并开始探索众包观点。 iPhone屏幕快照 投票愉快! 我们期待您的反馈!

聘请经验丰富的iOS应用开发公司的好处

如今,iPhone应用程序市场正在飞速发展,因为iPhone是市场上最创新的智能手机之一,并且以其质量和用户友好功能而闻名。 iOS应用市场正在成为全球许多企业的绝佳业务开发平台。 由于该平台具有很高的创收能力,巨大的投资回报率,巨大的客户群以及广阔的市场覆盖范围,因此当今几乎所有企业都渴望为其业务选择iPhone应用程序开发 ,这对于每个企业选择具有经验的iOS应用程序开发都至关重要。公司。 在这里,我们提到了一些使标题合理的好处: 技术专长: 如果我们谈论技术专长,那么经验丰富的iOS应用程序开发公司将是明智的选择,因为经验丰富的iOS应用程序开发公司在设计和开发iOS应用程序的各个方面都具有很强的技术洞察力。 它具有与最新的iOS SDK一起开发创新和直观应用程序的专业知识。 iOS应用程序开发人员具有使用最新最先进的工具和技术所需的技能。 经验: 经验丰富的iOS应用开发机构会从事不同类型的项目,例如简单项目和关键项目。 它具有为iOS应用程序设计直观的UI的动手经验,从而开发和设计动态应用程序以帮助您吸引更多客户。 经验丰富的iOS应用开发公司将提供使用先进技术开发的应用。 可扩展性: 显然,经验丰富的iOS应用开发公司还提供了可伸缩性的好处。 可以租用他们专用的iOS应用程序开发服务,企业所有者可以在其中完全控制项目和资源。 iOS应用开发公司将提供企业所有者根据其业务需求扩大规模和缩小规模的好处。 灵活性: 一家经验丰富的iPhone应用程序开发公司拥有多种灵活的聘用模式,它可以让您根据业务需求选择任何一种。 可以选择任何适合其业务需求的招聘模式。 企业所有者允许进行采访,根据需求评估资源,并可以为他们的项目选择最佳资源。 准时交货: 正如“经验无所不在”一样,对于有经验的iOS开发公司而言,这已得到证明,因为有经验的公司只会针对具有成本效益的项目进行及时的竞争,确保快速上市并支持提高投资回报率。 两家公司都有珍惜截止日期和有效交付项目的经验。 重复维护和支持: 无缝通信来自经验丰富的iOS应用开发公司,因为它在处理和与客户打交道方面拥有丰富的经验。 经验丰富的公司重视客户,并重视与客户保持友好关系。 经验丰富的应用程序开发公司保证了持续支持与维护。 结论: 我们相信,选择一家在iOS应用程序开发和iOS应用程序部署方面拥有丰富经验的公司,您将获得各种好处,并且肯定会为您的企业带来可观的投资回报率。 RawnApps是一家经验丰富的iOS应用开发公司 ,在许多垂直行业中提供广泛的定制,高科技或灵活的iOS应用。 通过info@ripenapps.com与我们联系,并与我们才华横溢的iOS应用开发人员联系。

如何为iOS 11.2.1下载cydia

iOS 11.2.1的发布发生在一周前。 告诉您有关此新更新的一些信息,它只有几兆字节的大小,并且没有对设备进行任何明显的更改。 但是,您首先需要知道的是,由于某些漏洞,新的更新禁用了Homekit选项。 我们确信此问题将得到解决,新的更新将很快发布。 但是与此同时,我将告诉您如何下载适用于iOS 11.2.1的cydia。 如何下载cydia 为了安装cydia ,您需要越狱设备。 今天好了,我将介绍一种无需人工越狱即可将cydia安装到您的iDevice的新方法。 cydia downlaoder可以将cydia安装程序下载到您的设备中,然后无需越狱即可安装cydia应用程序。 但是在此之前,您需要记住的事情很少,需要遵循的事情也很少。 我们开发了此cydia安装程序,以支持从10.xx到11.xx的更新。如果您使用其他工具将设备越狱,请记住,该设备将不享有该公司发布的软件保修。 它将不再有效。 幸运的是,对于该问题,您可以遵循两种解决方案来获得软件保修。 您可以越狱设备,然后将iDevice降级到较低的更新,也可以使用cydia安装程序安装cydia 。 在进行安装之前,需要执行一些步骤。 什么步骤? 因此,您只需遵循3个简单的步骤。 第一步是将iTunes软件更新到最新版本。 然后,第二步是创建iDevice数据的备份。 您可以将数据存储在外部驱动器或基于云的存储中。 完成第一步和第二步之后,最后一步是为iDevice充电达5​​0%或更高。 Cydia下载器兼容性 下图显示了支持将来和现在的cydia安装和越狱的设备。 令人悲哀地说,苹果蠹安装和越狱的iOS现在只支持64位的设备。 您可以下载cydia ,但无法再为32位设备安装cydia。 开发者积分 适用于iOS 11.2.1和越狱的cydia的全部功劳归于Pangu,TaiG和其他越狱团队。

SOLID原理与iOS和Swift中的示例(第1部分)

SOLID原则相对较旧,但适用于任何语言的任何OOP代码库的概念都非常有用。 SOLID代表“单一责任原则”,“开放/封闭原则”,“ Liskov替代原则”,“接口隔离原则”和“依赖倒置原则”。 这些原则相互融合并相互支持,是您可以为代码采用的最佳常规设计方法之一。 让我们逐一介绍一下: 单一责任原则: 单一责任原则(SRP)是其中最重要的一项。 它指出,每个模块都应该只有一个责任和变更理由。 SRP从小的具体情况开始,例如类和/或对象仅具有一个目的并且仅用于一件事情。 这个想法是,例如,当您创建一个名为Post的新模型类时,其唯一的目的和职责是保存有关帖子的数据和信息。 这是一个模型类,应该做的更多。 它不应访问数据库以保存自身。 它不应创建基础注释或以任何方式更改它们。 它不应该解析JSON来创建新的发布。 所有这些都是其他对象的单一职责,不应混入该Post类。 Post类只有一个更改的理由-当我们需要在应用程序中更改帖子的数据结构时,它会更改。 它不应更改,因为我们决定将基础数据库从Core Data交换到Realm,或者因为我们的后端决定返回其他类型的JSON。 开/关原则: 打开/关闭原理(OCP)指出,您的模块应打开以进行扩展,但应关闭以进行修改。 这是听起来很容易的事情之一,但是当您开始思考它的含义时,很难把头缠起来。 实际上,这意味着在编写代码时,您应该能够通过使用接口,抽象和依赖注入实现对象,从而通过继承,多态和组合来扩展对象的行为。 假设您拥有一个具有特定接口的PostsStorage类,该接口允许您将Post模型存储在数据库中。 根据该原则,当您想要扩展行为并向PostsStorage添加行为和功能时,您应该能够通过继承以及向该存储注入新的依赖项来做到这一点。 例如,如果您要将存储将帖子保存到的数据库从Core Data更改为Realm,则有两个选择:要么从中继承它的子类,然后覆盖调用Core Data并在其中使用Realm的方法,要么注入另一个数据库适配器/ accessor依赖项与Core Data遵循相同的协议,但在幕后使用Realm。 不过,在这两种情况下,以前使用PostsStorage的每个对象仍应能够像以前一样使用它,而无需进行任何更改,因为在两种情况下,他们所依赖的PostsStorage的界面都没有改变。 我们有效地扩展了PostsStorage行为,而无需对其进行修改。 它很好地与SRP保持一致,因为当我们将基础数据库交换到Realm时, PostsStorage没有理由进行更改。 首先,不是PostsStorage的责任。 装饰器设计模式主要集中在“打开/关闭”原理上。 装饰器是另一个类的包装,可以增强其功能。 它包装了您要装饰的东西,实现了它的接口,并将发送给它的消息委托给基础对象,或者增强了它们或提供了自己的实现。 让我们看下面的例子: 协议产品{ func price()->整数 func name()->字符串 } class FullPriceProduct:产品{ func price()-> Int { 返回1000 } func name()->字符串{ 返回“我是产品” […]

我应该将我的Whatsapp组移到OpenSports吗?

“我必须投入4个小时的工作,才能进行3个小时的接送游戏。” —使用Whatsapp的足球组织者 这听起来很熟悉吗? 必须跟踪谁来参加您的运动/健身活动以及谁付款了,这可能会非常压力,而且非常耗时。 多伦多的一个五人制足球组织者最近告诉我们,他必须“……投入4个小时的行政工作,进行3个小时的接送游戏” 。 总共7个小时的时间投入阻碍了他管理自己的足球组织的青年队的能力。 这是因为他使用Whatsapp和电子邮件来管理每周一次的五人制足球比赛。 现在,OpenSports使比赛前4个小时的组织变为几分钟 😅 ! 将“运动和娱乐”组从WhatsApp移至OpenSports,意味着您可以单击一次向OpenSports组中的每个人发送邀请参加活动。 请遵循以下简单步骤: 首先,在OpenSports上创建一个组。 这需要您1分钟。 这是费城一个受欢迎的皮卡足球团体,以OpenSports为例! 在OpenSports上创建组后,对于公共组,只需复制组URL并将其粘贴到WhatsApp聊天中,以便人们可以开始加入 如果您创建了私人小组,则需要创建一个唯一的邀请代码,该代码会生成一个链接,您可以通过电子邮件,Facebook,WhatsApp,Meetup等共享该链接,从而使工作人员可以轻松加入 当人们单击您组的链接(通过URL或唯一邀请代码)时,他们将被定向到您的组页面,并能够单击“加入”👇 您所有的成员都可以通过简单的常规登录过程加入您的OpenSports组: 现在,每次添加事件并向组成员发送邀请时,他们都会通过应用程序或通过电子邮件(取决于他们是否拥有该应用程序)收到邀请通知。 注意:如果您的OpenSports组的成员没有该应用程序,那就可以了! 他们仍然会收到邀请您参加活动的电子邮件,如下所示: 当您成为组织者的压力下降时,请观看您的游戏充满了! Ahhhhhhh🍰😎 如果您对如何将小组从Whatsapp或其他平台(如MeetUp)中移出还有其他疑问,请随时发送电子邮件至:alicia@opensports.ca

RWDevCon 2018 —返回动手教程及更多内容

RWDevCon满足了我对知识的好奇和渴望。 它提供了几天的工作时间来尝试使用相当新的iOS API和其他移动技术。 结果,会议提供的动手实践激发了与他们合作的新的更好的方法。 这也是一个自由判断的区域,因此我可以在一个非常支持的社区中尝试并学习一些最佳实践。 这是我第二年参加RWDevCon。 我公司提供的年度会议/学习预算非常合理。 我得到的超出了我的预期。 组织者吸收了去年的许多反馈意见,并为我们今年汇集了更加出色的会议体验。 主题是联系。 诸如开放空间,女性午餐,黑客马拉松,棋盘午餐等活动,以及带您的家人与您开会的活动,为我们提供了许多与组织者,作者和其他参加者联系的机会。 因此,今年,您不必为离开家人而感到内gui,相反,您可以将他们带到一起,以便他们可以参加家庭娱乐日并与其他家庭一起探索这座城市。 我是一个不想错过任何事情的人,所以我做了我最擅长的事情。 我尽我所能。 我超级精疲力尽。 在今年的会议上,我的学习内容之一就是练习放手的技巧。 我必须可以在以后录制的视频(通常在会议后1-2个月)发布后赶上会议。 我如何决定参加什么会议是基于我的当务之急。 如果有什么对我的团队有所帮助,我将其用作决定因素,这些课程包括架构模块,春季大扫除您的应用程序以及Xcode技巧与窍门等。 我还选择了一些会议来玩那些我通常没有机会喜欢机器学习(CoreML和视觉)和ARKit的技术。 我还向自己保证,今年要做的一件事是不要错过任何鼓舞人心的演讲(这是我有机会练习放开在同一时间进行的动手练习,直到稍后)。 对于今年的鼓舞人心的演讲值得现场直播,我感到非常高兴。 我对它们的看法如下: 首先是自我保健,其次是关心您的队友,最后,我们可以更好地与我们的用户产生共鸣。 了解开发人员和我们自己之间的怪癖或神经症,以成为更好的人。 探索《星球大战》 /科技公司的阴暗面,同时选择是亮面还是阴暗面。 并从关于App Store审核过程的秘密中看到了不容错过的事物。 开发人员确实很机灵,当会议视频库发布时,您会知道我的意思。 我通常对学习感到非常兴奋,特别是如果我可以抽出一些时间来破解某些东西的话。 因此,我不想错过有史以来的第一次RWDevCon Hackathon,我感到很孤单,但很高兴看到一群年轻人(女孩和男孩)参加了比赛。 黑客马拉松也是一个好主意,因为他们不到21岁,并且无法参加聚会。 经过一整天的动手实践,要熬夜到第二天凌晨4点才变得容易。 但是,我确实设法参加了开放空间以及我最喜欢的James Dempsey派对和琐事之夜。 我还尝试为黑客马拉松招募一些团队成员。 我参加了晚上11点左右的黑客马拉松比赛,这显然是队友抛弃我的一个很好的理由。 他们没有露面,但我确实从他们那里得到了一些启发和鼓励。 在开放空间中与艾哈迈德(Ahmed)进行野心勃勃的聊天是我最喜欢的话题。 从某种意义上说,我很高兴艾哈迈德决定在聚会上待更长的时间,否则我们可能会整夜不停地用两个雄心勃勃的头脑熬夜。 Namrata在为第二天的演讲做准备的基础上,为我提供了大力支持。 我确实告诉她我会做所有的工作,她可能会成为我的辅导老师。 她提到也许我们应该将数字调查作为RWDevCon应用程序的一部分,但她也支持Ray不太喜欢它。 他仍然会喜欢纸时尚的方式。 这是真的。 有时最好能看到/欣赏与会者的笔法。 :] 午夜过后,我回到房间去洗个澡,感到很新鲜,喜欢砍东西。 我第一次从Ray Wenderlich的git仓库签出了开源。 我说我最多会花两个小时来破解某些东西并入睡,但我的内心却在说我不会输给年轻人。 我的妻子也很支持我。 她正在打电话告诉我继续前进。 […]