Tag: macos

生物群落v2.0.0

去年下半年,我遇到了一个大型iOS项目有许多不同测试环境的情况,因此需要不断地在它们之间进行切换。 解决此问题的典型方法是创建构建变体,每个方案的设置都在编译时设置。 这是可行的,但事实证明非常耗时。 切换方案,重建和测试新配置… 考虑到必须有一种更好的方法,我在GitHub上搜索了一个允许的库,该库可以帮助我实现想要的工作。 但是一段时间后,我发现实际上没有一种类型安全的解决方案可以让我在运行时执行此操作。 所以,我做了一个。 Biome是一个轻量级框架,为Swift开发人员“规定”一种管理不同环境变量的方式。 与dotenv相似,您可以编码一组值以换入和换出不同的变量。 版本1 第一个版本很快被黑客入侵,以适应能够在每个环境中快速切换变量集而无需重新编译整个应用程序的最低要求。 它缺乏类型安全性,使用起来有点笨拙。 我知道这并不完全是我想要的,但是Swift并没有工具来实现我所追求的目标。 幸运的是,Swift 4引入了可编码协议,而我正是完成我要完成的任务所需要的。 在今年参加WWDC并与Swift编译器和标准库团队的一些非常有用的成员交谈之后,我对如何更新Biome以利用这些新工具有明确的愿景。 版本2 我很高兴地宣布,我已经将Biome更新到了2.0.0版! 此版本带来: 类型安全的Biome对象,可在Xcode中提供自动完成开发人员代码的功能 Codable支持自动加载JSON和Codable对象 框架的改进接口 Swift 4.2的新Hasher和CaseIterable更改的预准备 100%单元测试覆盖率 您可以在此处找到Biome的存储库,并在此处找到版本2.0.0的发行版。

Swift与iOS编程

(本文最初于2018年1月17日发布在这里) 在我的旅程的这一点上,我并没有真正理解学习Swift和学习UIKit以及Apple的各种框架和API(可以实际构建应用程序)之间的区别。 因此,当我浏览Swift编程书(在上一篇文章中提到)时,我有一个愚蠢的想法,即当我完成本书时,我将成为一名iOS高级开发人员,能够制作我梦dream以求的应用程序。 这是一本约400页的书,当我完成本书的一半时,我开始思考“我正成为iOS开发人员的一半! 我要到达那里,再走一点!”,但在我的脑后,我有些怀疑。 是的,我正在学习大量有关Swift的新材料,包括基本语法,流控制,集合和函数,结构与类,初始化等,但是这些都没有让我更接近于构建实际的应用程序。 我一直在想,这本书很快就会有一个具有启发性的里程碑,它将把所有东西联系在一起,并明确说明如何构建您能想到的任何应用程序。 我不想在这里给人留下错误的印象。 这本书非常了不起,它帮助我在Swift中打下了坚实的基础(尤其是作为一个几乎没有编程经验的人)。 但是,当然,到我完成本书时,还没有神奇的启示性经验。 是的,您将在上一章中构建一个简单的“待办事项”应用程序,但这并不是“恭喜! 您是iOS的高级程序员!”更多的是“这里有一种可能,现在您真正的学习之旅就开始了!” 再说一遍,这是一本很棒的书,我认为通过阅读,我绝对做对了。 它也可以很好地作为参考,在我处理项目时,我经常回到它上面。 第一次经历时,我只是抱有错误的期望,认为可以将iOS开发掌握在一本书中,而不了解编程语言和框架之间的区别。 当我完成这本书时,我想从事一些理论上少而又基于项目的工作。 经过研究后,我决定选择Paul Hudson的Swift黑客。 它收集了39个iOS项目,他将逐步指导您完成每个项目,并为您提供每行代码的详细说明。 本章从快速概述该目标开始,然后作者不花时间,直接进入代码。 整本书都可以在他的网站上免费获得,这很棒。 尽管在完成几个项目后,我还是决定购买该电子书,以:1)支持作者,2)获得一种可移植的格式,可以在任何地方使用。 此外,他定期更新书籍以涵盖Swift和iOS的新功能也没什么坏处(例如,项目已更新为包括Face ID和Codable) 从《 Swift编程》这本书开始,将我所学到的东西应用到可以在手机上实际测试的真实项目中,真是太好了。 当我开始阅读上一篇文章中提到的Udemy教程时,我真的很难理解大多数东西是如何工作的以及为什么。 但是现在,我终于可以开始看到API调用背后的逻辑了,事情开始变得更加有意义了。 这并不是说从现在开始一切都顺利。 UIKit是一个复杂的野兽,有些概念使我花了很长时间才理解。 不过,总的来说,这是我开始对自己的编程技能更有信心的时候。 在这一点上,我开始思考“毕竟我可以成为一名程序员”……除了一个小问题,就是动力。 在全职工作回家后的夜晚和周末,很难激发自己去学习编码。 我将在以后的文章中谈论所有这些!

buildflow —更好的通道?

那么不一定是更好的,而是另一种。 目标是为iOS App Developer创建一些独特而有用的工具。 名称: buildflow iOS开发人员可用的大多数工具都可以作为Web解决方案或命令行工具使用。 设计为CI服务器或任何其他自动化过程的一部分。 与此相反,我想创建一些有用的工具,这些工具: 对于每个iOS App开发人员(像我一样)都很方便 可以离线工作(对于大多数任务) 不需要任何订阅费即可购买 有一个不错的交互式用户界面 适用于每台Mac 因此,构建流程的想法诞生了。 在rogerboesch.com/buildflow上查看更多 请在kickstarter.com上提供支持,以帮助实现该项目(广告系列即将开始) 当我开始从事buildflow时 ,需要访问数据并将其回送至Apple的AppStore并从其中回送,以使其正常工作。 我之前已经根据fastlane的飞船和脚本编写了一些类似的文章。 但是对于这个项目,这还不够。 我需要一些可以集成到任何macOS甚至iOS App中的类和API(而不是脚本)。 类似的东西就像快车道太空飞船,但完全是用Swift编写的。 这是buildflow-core ,今天可以在GitHub上以早期版本使用。 我通过使用Charles Proxy并检查宇宙飞船发现了实现它所需的大多数信息。 可以肯定的是,其他人也已经在考虑做类似的事情,并且由于我还使用了来自其他开源项目的大量信息,因此我将其也设为开源。 我希望其他许多人会喜欢并加入以使其快速发展。 当然,您也可以将buildflow-core用于命令行工具和/或服务器集成。 它将基于Swift 4,因此任何平台都支持(理论上)可以使用它。 到目前为止,由于它内部使用URLSession进行网络访问,因此在Linux上将无法使用。 据我所知,它在Linux上仍然不可用,但是可以很容易地用IBM和/或Vapor的任何第三方库替换。 因此,这也是“目标”,但不是我的首要目标。 !! 重要! buildflow-core的当前状态是作为PoC / MVP的一部分创建的,它仍然很“ hacky”,不是很复杂;)。 但这有效! 目的是看是否可以通过这种方式实施。 因此,我将在内部重构许多事情,而不会在下一次提交中破坏公共功能。 技术方面的事情如下: 使用通用类型 动态映射 使用ICodeable 使它更加迅速y 但是还缺少一些功能: 在BFCorePortal.swift中实现mac / ios说明符 […]

高效迦太基

迦太基 由于iOS 8迦太基一直在帮助创建具有零配置的框架(通过单击复选框共享默认方案除外),因此无需在Xcode中创建工作区即可管理二进制级别的依赖项(由于ABI具有更大的价值即将到来,希望也可以共享动态的第三方库),并通过不指向GitHub而是指向本地文件系统上的目录来测试您的框架。 效率等级1 在项目中拥有第三方依赖性是一件好事,但如果您有大量使用或多或少使用同一组第三方框架的项目,该怎么办? 好吧,默认情况下,您将拥有每个项目中每个依赖项的源代码和二进制文件的副本。 那不是很有效,是吗? 因此,为您的所有项目创建一个共享的Carthage目录,并从使用该目录的每个项目中创建指向该目录的符号链接是有意义的。 让我们在主目录中创建一个共享的Carthage目录,方法是键入ln -s ~/Carthage ./Carthage ,然后输入mkdir Carthage ,然后在项目目录中,通过键入ln -s ~/Carthage ./Carthage创建一个符号链接。 效率等级2 默认情况下,许多框架可针对多个平台(iOS,macOS,watchOS,tvOS)进行编译。 如果我们仅使用iOS,该怎么办? 我们可以通过使用–platform iOS标志来–platform iOS构建时间,即仅针对所需的平台进行构建。 此外,当我们不想不必要地重建时,可以使用–cache-builds标志。 有时,当我们只需要检查较新的版本或更新源代码时,我们甚至可以使用–no-build标志。 效率等级3 它变得太冗长了,不是吗? 别名可以为您提供帮助! 让我们在主目录中创建文件.aliases ,方法是输入nano .aliases ,然后输入nano .aliases并向其中添加以下内容– 别名cartlink =“ ln -s〜/迦太基./迦太基” 别名cartboot =“ carthage bootstrap –no-build” 别名cartupdate =“迦太基更新–no-build” 别名cartbuild =“ carthage build –platform iOS –cache-builds” 现在,我们可以通过键入source ~/.aliases来启用别名,然后通过键入其名称使用任何别名,例如cartlink 。 […]

指数

您可以在这里找到我最新的macOS App Development Series中的所有剧集。 每个链接将带您到嵌入视频的匹配文章。 搭建舞台 第1集。 故事板(2018年1月7日) 第2集。 自动版面配置(2018年1月21日) 第3集。 NSCollectionView 2018 ( 2018年1月28日) 做得更好 这里有一个主题列表,我将在接下来的几集中介绍这些主题。 NSCollectionView NSTableView 菜单栏 分割视图控制器 NSButton 自动版面 NSOutlineView 拖放 核心数据 下载 文件管理器 可可豆 迦太基 迅捷软件包管理器 感谢收看! 😎 如果喜欢,请测试 5秒钟内 可以击打 👏多少次。 这是出色的 指尖测试 ,可以帮助其他人看到故事。 如果您对任何主题感兴趣,请在下面给我留言。 在此处 查找上一个系列 。

了解如何从头开始开发自己的macOS应用程序!

您是否想学习如何开发自己的macOS应用程序,并以此为荣并在您的个人MacBook上使用它? 或者,也许您有激动的热情开始在Mac上进行开发? 然后,您来对地方了! 在这里,我将引导您完成使用最现代的语言之一Swift开发第一个非常macOS应用程序的步骤。 对编程有兴趣 对Swift编程有一些基本的了解(优势) 已安装Xcode 8.3.3 热情打造macOS应用 macOS开发的基本概念 如何将Alamofire与macOS应用程序集成以执行网络呼叫 如何创建拖放机制 一些Swift 3语法 我敢肯定,您很高兴知道我们将制造什么好东西! 在本教程中,我们将研究Mac的主要应用程序层Cocoa。 该层负责应用程序的外观和用户动作的响应能力,这也是我们将引入所有可视元素,网络和应用程序逻辑的地方。 我们会将图像上传到uploads.im,因为它提供了供我们使用的开放API。 完成整个教程后,这将是最终产品, 首先将向用户显示一个主屏幕,并显示“在此处拖放图像”的说明。 然后,用户可以将任何 jpg 格式的图像 拖动 到应用程序中,然后该应用程序将显示加载微调框,以通知用户它正在将图像上传到服务器。 服务器 成功 响应后 ,用户将获得一个弹出警报窗口,可以在其中 将URL复制到剪贴板 ,然后用户可以将URL粘贴到任何地方,例如在Internet浏览器上从服务器查看其图像。 聊够了,让我们开始吧! 首先,让我们启动Xcode 9并创建名为PushImage macOS应用项目。 在Application下选择macOS和Cocoa App 。 您可以按照我在下一页中输入的设置进行操作,然后为您的项目文件选择一个目录。 现在您已经完成了所有项目的设置,我想借此机会在Xcode 9中重构我最喜欢的一项新功能, 重构! 如果您使用过以前版本的Xcode,则无法重构Swift代码。 让我们试一试。 突出显示ViewController并转到Editor->Refactor 。 让我们将其更改为HomeViewController ,然后单击Rename 。 这将对您的filename , class name和Storyboard viewcontroller class […]

第1集。 故事板

是2018年 新年快乐! 今年的目标是什么? 上体育馆,还是在奶酪上加些奶酪切奶酪? (来自Spotify广告的一个小玩笑) 我为什么要这样做? 我今年的主要目标是付出多于付出。 过去,我回顾了我的作品,发现macOS App Development视频教程对世界产生了一些影响。 我决定再次上课,并用新内容更新教程。 这就是为什么您看到第一篇文章。 我在做什么? 我将其作为实验和附带项目,我的主要工作是构建Sorted。 如果您发现任何拼写错误,发音错误或教学方法不正确,请随时告诉我。 我会尽力提高质量。 我是为谁干的? iOS开发人员或编程初学者。 我开始通过扩展Sorted以涵盖Mac平台来制作macOS应用。 我已经看到了两组主要的macOS开发人员。 他们要么是具有10多年经验的经验丰富的开发人员,要么是他们开始在iOS上工作,并希望将产品扩展到像我这样的macOS。 该系列专为正在转向macOS开发的iOS开发人员而设计。 同时,内容对于初学者也很容易理解。 我该怎么做? 我2018年的决议是付出多于付出。 我希望通过在YouTube上发布视频和在Medium上发布文章,希望使内容可以广泛地提供给大多数人。 如果在托管方面没有什么帮助,我愿意制作中文版本并与中国开发者社区共享。 每个星期天都有新剧集 … 免费。 我正在学习整个过程。 我相信最好的学习方法就是教书。 我鼓励您将您的想法发给我,如果您喜欢这些内容,请留下评论并鼓掌。 双赢 。 我还创建了一个索引页。 现在看起来有些空白,但是每周我都会在文章和视频中添加新链接。 作为这个新系列的第一集,让我们从一些基础知识开始。 故事板是我两年前制作的上个系列中观看次数最多的视频。 这也跳过了编码语法和语言版本的复杂性。 希望您喜欢这个短片。 源代码可以在这里找到。 下周见。 请按照此处的系列获得通知。 这些天在地球北边有点冷。 保暖。 对于那些在南部的人。 希望您周末愉快! 感谢收看! 😎 如果喜欢,请测试 5秒钟内 可以击打 👏多少次。 这是出色的 […]

初期

(本文最初于2018年1月13日发布在这里) 我一直想进入iOS开发已有几年了。 早在2014年,我除了在大学里读过几门课程之外就没有任何编程经验。 所以我开始在iOS上阅读,然后在Swift宣布之前涉足了Objective-C。 我购买了Stephen G Kochan的《 Objective-C编程》一书,并注册了一个有关iOS编程的Udemy视频课程。 尽管我确实设法在App Store上发布了基本的BMI计算器,但我都没有完成任何一项(也许完成了10%左右)(是的) 三年后,我决定再次尝试iOS编程。 那是2017年初,我刚刚在Udemy购买了Devslopes的iOS 10课程。 这次我实际上比第一次尝试走得更远,尽管在课程进行到一半时材料的难度大大提高了。 在浏览视频时,我不了解大多数情况,因此感到沮丧。 我试图通过它来蛮力,我在iPhone和计算机上使用了Anki抽认卡,并建立了一个精致的系统来尝试记住各种功能和API调用。 我会从字面上背诵自己的话,例如当我走在街上时如何设置UITableView。 这太可怕了,我最终决定需要购买一本好书来补充视频教程。 在网上进行了一些研究之后,The Big Nerd Ranch的Swift Programming书似乎是一个不错的选择。 我最终非常喜欢这本书,暂停了Udemy课程,并在大约2个月的时间内浏览了整本书。 一些挑战特别艰巨,尤其是在即将结束时。 幸运的是,他们有一个在线论坛,读者可以在其中讨论解决方案。 当Swift 4和iOS 11发布时,由于我认为它已经过时了,我停止了iOS 10 Udemy课程的开发。 回顾过去,这可能是一个错误,因为我觉得我仍然存在的一些鸿沟可能已经通过该课程得到了纠正。 接下来,我偶然发现了Paul Hudon撰写的Hacking with Swift书,其中包含出色的终身Swift更新策略,这意味着您可以免费获得Swift 5、6等的更新。这就是我开始更加自信的地方。用我的Swift编程技能 我将在下一篇文章中讨论!

Swift教程:如何在Interface Builder中使用AutoLayout在水平方向上配置NSScrollView(MacOS X,Swift 4.2)

本文最初发布在 http://popcornomnom.com/ 你好! 不久前,我已经开始为MacOS编写应用程序(我具有IOS开发背景),并且遇到了这样一个问题,即我的问题大部分答案是: 已过时(超过3年前的答案,因此某些功能已被弃用) (关于目标C的一些答案让我的“笨拙”的眼睛有点痛苦), 答案适用于iOS,而不适用于OS X 有时找到所需答案的难度比应该的要难。 因此,我决定开始编写循序渐进的快速教程(格式为问题解答的简单教程)。 问题 内容不适合应用程序窗口,并被视图控制器剪切。 解 要解决此问题,您需要向视图中添加约束以达到内容的动态宽度和高度。 好的,让我们开始吧! 步骤1-3。 (步骤1-在下面的图像上)首先将NSScrollView拖动到ViewController。 然后在“属性检查器”的左侧面板中,选择(2)“边框类型” —无,然后选择(3)取消选中“绘制背景”。 步骤4。 之后,添加与超级视图相关的顶部/底部/前导/尾随约束。 我将最高约束设置为20,因为我的NSWindow“完整内容视图” = true。 第五步 然后添加您的内容视图(在我的情况下,这是2个由NSStackView包装的标签)。 第六步 接下来,我们向您的contentView添加顶部,顶部,尾部约束,并向底部添加两个底部约束。 我将所有常量设置为24。 步骤7–8。 然后(7)将第一个底部偏移关系更改为小于或等于(≤) ,并将优先级设置为490 ,(8)将第二个底部偏移关系设置为 – 大于或等于(≥) , 优先级为510 。 步骤9。 (9)除此之外,我还添加了一个最小的contentView宽度500( 宽度常数 = 500 , 关系大于或等于 )。 步骤10-11。 对于scrollView的documentView,添加顶部,顶部,两个尾部和两个底部约束。 (10)将第一尾随偏移关系设置为小于或等于 ,并将优先级设置为510 ,对于第二关系 – 大于或等于 ,将优先级设置为490 。 […]

更好的Xcode内部版本号

iOS和macOS应用程序具有版本号和内部版本号。 通常,您会在Xcode或iTunes Connect中看到这些代表以下内容: 1.0 (1) 这是版本号1.0 ,内部版本号1 如您所知,内部版本号用于区分同一版本的不同内部版本,因​​此您可以上传内部版本1 ,然后进行修改,然后上传内部版本2 我过去每次创建构建时都手动增加此构建号,但是该策略存在问题: iTunes Connect将拒绝与先前上传的版本具有相同版本号的版本。 因此,如果您忘记增加内部版本号,则会浪费时间。 有时我不记得是否要增加它,所以最终会做两次 内部版本号对这个特定内部版本没有任何帮助 最后一点是最重要的。 您怎么知道您的构建正确? 质量检查人员可能告诉您他们在版本8上发现了问题…又是哪一个? 或者您要在iTunes Connect上提交您的应用程序,而构建版本为9 –是您刚刚创建的应用程序吗? 最近,我一直在使用时间戳(yyyyMM.dd.HHmm)作为我的内部版本号,如下所示: 1.0 (201805.15.1407) 此版本创建于15/05 / 2018,14:07 请注意,内部版本号只能包含三个句号,这就是为什么我将年份和月份放在一起的原因 这有很多好处: 如果质量检查人员想要测试今天构建的更改,他们可以轻松地验证其版本的构建时间是否正确 较新的版本始终具有较高的版本号,并且它是自动化的,因此您不必担心开发人员会犯错误。 如果您将一个版本上载到iTunes Connect,然后第二天将另一个版本进行了一些更改,则很明显哪个是哪个! 使用Xcode的构建阶段中的“运行脚本阶段”和以下脚本,这很容易实现: ## Generate the build number using current date and time buildNumber=$(date “+%Y%m.%d.%H%M”) ## Set the build number in plist file /usr/libexec/PlistBuddy […]