Tag: 开发

Hotels.com在dotSwift 2019会议上

1月的最后一周,Hotels.com iOS团队的两名工程师前往巴黎参加了第五届年度dotSwift会议。 对于那些不知道点会议是什么的人,让我让您快速上手。 点会议相当于TED演讲,但更侧重于技术行业的主题; dotConferences有7种不同的风格:dotSecurity,dotScale,dotAI,dotGo,dotCSS,dotJS和我们自己的dotSwift会议。 那天是与行业内其他工程师会面以及与Expedia Group内其他工程师(即来自巴黎Traveldoo的iOS团队的成员)会面的好日子。 一天被分成3组,每组之间都有休息。 讨论的话题范围很广, “纯粹的快速”应用程序并不是真正的东西,因为它们都依赖于Objective-C运行时以及采用Objective-C的方式(而不是试图尽快摆脱对它的提及)尽可能荒谬),例如关于为什么在代码中为方法和变量名使用Unicode字符的建议。 我觉得我应该对此做一点解释: 谈话远没有暗示您要做这样的事情; ⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⛵️⎈ 告诉您的船上物体应该向左转。 该表示法可能会作为当代艺术作品消失,但作为命名约定的标准绝对没有用。 相反,它专注于科学建模并使用方程式具有的相同符号,例如分别将∑ (sigma)用作函数,将λ (lambda)用作波长分别作为函数和变量名称。 如果您要与不想看长函数名的物理学家合作(不管它们的描述性如何),这是有道理的,并且还给他们提供了调试算法(而不是代码)的机会。 听到一些非常有才华的人的想法真是太好了–我们甚至还听到了苹果公司开源项目工作人员的演讲,例如SwiftNIO(异步事件驱动的网络框架),它使人们真正了解了他们所面临的问题遇到以及他们如何解决它。 除了主要演讲外,Swift社区成员还进行了许多闪电演讲。 这些都是直截了当的超级快速对话,经常提供思想观点或提出解决问题或技巧的有用方法。 演讲的照片可在https://dotswift.io上获得。 可以观看视频:https://www.dotconferences.com/conference/dotswift 我强烈建议您给他们看表-也许您会找到解决您当前遇到的问题的方法或学习新知识。

RxSwift#4 — RxSwift용한이VM MVVM패턴

在MVVM和RxSwift中进行比较。 있는있는가가있는VC MVC면서 면서보면서시작해보자 MVC:模型+视图+控制器 MVC쓰이。이다이다。 控制器控制器 模型 视图视图 控制器 。 查看 데이터들을보여주는하고 Model Model 데터를터를터를터를다。 MVC있있있지만, 앱이커져서스클래스클래가지게다면면? 개의개의개의상의상의시작된시작된시작된다。。시작된 애플의MVC패턴은 视图 와 控制器 있어 Controller ViewController 한한다。 在MVC中,选择“ Massive View Controller”。 控制器控制器控制器控制器 。 类别中的다를过载M이것이지이아니가MVC아니다。 많은많은App들이MVC패턴으로개발되었기개발되었이다。 MVVM:模型+视图+视图模型 ViewModel은View를표현하기만들어진模型 ViewModel建模模型View的视图。 MVVM下载。 型号 대한다대한스들이데이터대한通知을보내더라도이통신하통신하지않는다。 ViewModel和 Model一起查看ViewController(View)的方法。 ViewController 는View Life Cycle을처리하고이터를UI구성요소에bind할때만View Model및View와다통신한。 (MVC패턴에서처럼)View는를ViewController인식한다。 问:그렇다면ViewModel은MVC에서의ViewController是否提供? A:그렇기 도 , 도지않기도다 在ViewController中使用ViewController。 […]

IOS AVFOUNDATION播放基准

通过安德烈·波波夫 ( Andrey Popov) 随着iOS 11的引入,AVFoundation框架进行了一些更改,并扩展了新功能 。 因此,为了更好地理解和利用框架功能,以下是对去年在Apple WWDC上首次引入的AVFoundation Playback基准测试进展的介绍和评论。 AVFoundation功能 AVFoundation提供了用于多种多媒体操作的API,包括回放,图像捕获,导出和大量的编辑选项。 播放类型: 从本地存储: file:///…/example.MOV. 从将文件上传到的Web服务器,然后进行逐步下载: https://example.com/example.MOV. : https://example.com/example.MOV. 一种更动态的方法是HTTP Live Streaming(HLS)。 HLS播放播放列表。 播放列表是.txt文件。 它包含#EXTINF标签。 标签包含段(segment1.ts等),每个段的长度为10秒(#EXTINF 10.001)。 视频6Mbit播放列表; 影片4Mbit播放清单; 视频2Mbit播放列表音频立体声播放列表; 音频环绕播放列表; playlist.txt文件: #EXTM3U #EXT-X-VERSION:4 #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:0 #EXT-X-MAP:URI=”patpmt.ts” #EXTINF 10.001 segment1.ts #EXTINF 10.001 segment2.ts 通常,默认URL与基本播放列表相关,该基本播放列表包含相同内容的多个播放列表,但根据传输速度,格式(有时甚至是语言)进行配置。 通过网络播放 今天, AVPlayerItem具有三个属性: playbackLikelyToKeepUp , playbackBufferFull和playbackBufferEmpty 。 在iOS 9及之前的版本中,AVFoundation客户端应控制渐进式下载属性,并等到它们设置AVPlayer.rate = 1之前,直到playbackLikelyToKeepUp和playbackBufferEmpty属性为true。 […]

从iOS开发人员到产品经理(第1部分)

产品经理(PM),听起来不错的职位,对吗? 但是我是如何从开发人员成长为PM的呢? 我期待什么,我得到了什么? 你怎么能成为一个好的下午? 我的故事始于一名iOS开发人员,我自己学习了一切,没有人教过我,仅仅是因为没有人能做到(目前,突尼斯大学没有教过)。 在2010年,我是一名刚开始对3D游戏充满热情的计算机工程师。 我当时正在这个领域寻找工作,但是那个时候在突尼斯,只有少数几家公司指定3D领域,没有人愿意雇用没有经验的人,我们都知道……而我需要一些钱(例如,您知道要吃饭),我在一家法国电信公司的呼叫中心成为了代理商agent。 “ 可是等等! 你为什么要谈论这个? 这与PM工作无关。 “ 是的,它确实 ;)。 实际上,这对我的运营商非常有用。 它使我学会了如何控制自己的压力(如果有客户打来电话,很少会向我们表示祝贺。)以及“引导”讨论和他对我所工作的公司的“愿景”。 这是一门艺术,我对此很擅长。 但是您知道工程师永远无法或至少不会这样做。

iMate-iOS开发助手

iMate,iOS开发工具。 在设备和模拟器中显示应用和数据文件,在模拟器中安装,运行应用 用户说: “我尝试了几个类似的应用程序(OpenSim,…..),但这确实可以满足我的所有需求。 查找我当前Xcode项目的相应文件夹,安装/卸载应用程序,并找到这些f *** ng文件夹,这些文件夹使用50%的SSD来存储我(作为活跃的GIT用户)不需要的档案。 感谢开发人员提出清晰的概念” 网站 下载 Mac App Store(iMate Lite) 在iOS设备和模拟器中显示应用 在模拟器中运行,安装,卸载App 显示构建,存档文件,删除那些文件以节省空间 删除无用的模拟器 在iOS设备和模拟器中显示应用 2.显示构建,存档文件 3.在模拟器中运行,安装,卸载App

iOS框架+ Bitrise CI + Cocoapods

MoveUpwards / Sejima iOS用户界面库。 通过在GitHub上创建一个帐户来为MoveUpwards / Sejima开发做出贡献。 github.com 为什么Bitrise CI优于其他CI替代品? 我们喜欢Bitrise CI的地方是他的工作流程设置。 与其他一些流行的解决方案相比,您可以提供.yml配置文件,也可以通过易于理解的界面(非常接近Apple Automator)定义要执行的过程。 即使Bitrise CI没有开源计划,您仍然可以免费使用它。 在这种情况下,您的工作流程将根据可用性在共享工作者上执行。 但是说实话,这从来不是我们需要的问题。 [edit]实际上,根据Bitrise CI团队的说法,他们确实有一个开源计划。 选择“应用商店”导出方法, 最后但并非最不重要的一点是,注册一个Webhook,以便在将代码推送到存储库时Bitrise CI可以自动开始构建。 Bitrise CI也将启动第一个工作流程。 如果构建失败,请不要担心,我们将根据需要自定义创建的工作流程。 自定义您的工作流程 返回您的信息中心,然后在可用的应用列表中选择您的应用,然后选择工作流程标签。 默认情况下,Bitrise CI创建的工作流程包含构建和交付iOS应用程序的最少步骤。 就我们而言,除非发布给Cocoapods,否则我们无需发布框架。 首先,让我们删除所有步骤, 但以下步骤除外 : 激活SSH密钥 Git克隆存储库 现在我们已经做了一些清理工作,让我们单击“ Git Clone Repository”步骤下面的“ +”按钮并搜索“ Recreate User Schemes”步骤并选择它,以添加交付过程所需的步骤。 通过以下步骤重复相同的操作: 产生文字档 脚本 发送一条Slack消息(如果您正在使用Slack,否则应考虑使用它) 定制步骤 首先,我们将自定义“生成文本文件”步骤,以创建将在Cocoapods中继中推送的.podspec文件。 首先提供您的podspec文件的名称 在“文本文件的内容”字段中提供您的podspec内容 您可以使用Bitrise CI变量“ $ […]

在Xcode 9和iOS 11中启用无线构建/调试

Xcode菜单栏>窗口>设备和模拟器 设备和模拟器 选择您连接的设备。 选中“通过网络连接”框。 就这样! 设备名称旁边的网络图标表示已连接。 如果您遇到问题,请尝试在两个设备上打开和关闭Wifi; 并确保您可以从开发Mac实际ping您的设备。 您还可以通过转到“ 遥控器和设备”>“远程应用程序和设备”并从Mac配对来远程构建到AppleTV。 推特: @aaronykng IG: @ hi.aaron

使用Marathon with在Swift中使用脚本提高生产力

在iOS开发过程中,总会出现在整个项目中执行重复性任务的情况。 乍一看,您可能会发现其中的一些,后来又发现。 有可能: 管理所有项目资产,有时调整它们的大小以适合适当的尺寸,最后添加到Xcode项目中。 使用所有必需的文件(例如ViewControllers,Views,ViewModels等)创建新屏幕的文件夹结构。 在Fastlane和Quicktype之前,您需要手动执行以下任务: 在Testflight / Fabric上部署应用程序 根据API JSON响应创建模型 好消息是,iOS社区正在发展,并且有越来越多的工具可以自动执行日常开发流程,例如Sourcery或SwiftGen。 但是,如果它们都不满足您的需求怎么办? 您是否应该继续前进并继续手动重复进行所有操作? 还是应该使它们自动化? 好的,让我们写一些脚本,但是… 实际上,不需要使用Bash,Python,Ruby或其他脚本语言,因为Swift提供了编写脚本的功能。 与Marathon结合使用,在OSX上编写和安装脚本确实非常容易。 Marathon生成一个Xcode项目,并允许在脚本代码中使用依赖项。 让我们编写一个程序,该程序将生成具有所有所需类的自定义应用程序的屏幕文件夹结构。 在这种情况下,它将是“ 登录”屏幕文件夹。 每个文件都将包含样板代码以及已导入的所有必需库。 首先,让我们安装马拉松。 在撰写本文时,Homebrew还不支持最新版本的Marathon,因此我建议您通过Swift Package Manager安装它。 打开终端并输入: $ git clone https://github.com/JohnSundell/Marathon.git $ cd马拉松 $使 成功安装Marathon之后,第二步是创建FilesGenerator项目 $➜马拉松创建FilesGenerator $ Files在FilesGenerator.swift中创建脚本 $✏️打开FilesGenerator.xcodeproj / 它应该打开一个包含main.swift文件的Xcode项目 因为我们要对文件进行操作,所以最好添加名为Files的帮助程序依赖项。 让我们通过执行命令来做到这一点: $ marathon add https://github.com/JohnSundell/Files.git 关闭您的Xcode项目,然后输入以下内容再次将其打开: $ marathon edit FilesGenerator.swift 您应该看到添加了文件依赖关系的新的依赖关系目录。 现在,我们准备进行第三步编码。 […]

创建自己的功能标记服务(iOS示例)

首先,我要说的是,这里有很多很棒的平台,它们的软件比这还先进,并且这可能不是每个人的完美解决方案。 这是一个易于实现,免费且易于实现的解决方案,但代价是缺少功能和用户友好的仪表板。 什么是功能标志? 最简单形式的功能标志只是给定键的true或false值。 功能标记通常用于测试项目中的新功能,因此使用前缀“功能”。 想像一下您有一个应用程序,并且想要启动一个全新的主页,但是由于它的功能很大,因此存在很大的风险。 如果您可以完全支持这两种方法,直到知道新的方法稳定下来,而不是完全替换它,该怎么办? 使用功能标志,您可以执行此操作。 例如,当用户启动应用程序时,您可以检查是否启用了新的首页功能标记。 如果是这样,请加载新主页,否则加载旧主页。 我的应用很小,用户很少,我是否还需要使用功能标志? 没有快速答案。 这实际上取决于您的项目和项目要求。 就我个人而言,我是一个狂热的粉丝,但是这篇文章不是关于为什么的论据,而是关于如何做的论据,所以让我们开始吧。 第1部分:配置 为您的项目创建功能部件标记服务分为3部分。 这是第1部分,涵盖了我们将在客户端内进行交互的配置文件。 由于它的灵活性和可读性,我们将用JSON编写此配置文件。 在编写此文件之前,让我们确定该文件的要求: 密钥:这将是我们在客户端中引用以获取布尔值的标志的名称。 启用:这是一个布尔值,告诉客户端是否启用了该标志。 这就是我们所需要的。 如果愿意,我们可以添加更多字段,例如名称和描述,但是为了本教程的缘故,我们将使其简短而切合实际。 让我们创建我们的config.json文件: 第2部分:主持人 这部分是您可以选择的地方。 在本教程中,我仅涉及该文件的公共访问。 我可能会做有关如何私下托管它的其他教程,请告诉我您的想法。 选项1:Github 一种选择是将该文件托管在公共GitHub存储库上或公共GitHub gist上。 这是我最喜欢的方法,因为GitHub提供了GUI来编辑文件,因此随时可以轻松更新。 选项2:您的域 另一种选择是将其托管在您自己的网站上。 然后可以通过http://yourdomain.com/config.json访问它 第三部分:客户 对于此示例,我们将在Swift中构建客户端。 请注意,在Swift中有多种方法可以进行网络通话。 为了本教程的缘故,所有标志都被提取并存储在本地(提取完成后会触发通知)。 如果您在第一次调用之前尝试获取,则所有标志都将返回false。 首先,首先创建一个新的Swift文件,并将其命名为“ FeatureFlagClient.swift” 这就是我们的客户端配置。 让我们学习如何使用它。 在您的应用程序委托中。 使用新的config.json端点配置新的FeatureFlagClient 。 现在,要检查功能标志的值,请使用以下命令: FeatureFlagClient.isFlagEnabled(“ new-feature-1”) 开始的结尾 这只是功能标记之旅的开始。 它们非常强大,并具有大量更高级的用例,例如A / B测试等。

Xcode捷径

了解一些快捷方式可以帮助您加快iOS的开发速度,并使您不必接触鼠标或触控板。 在左侧的“导航器面板”上,以下键盘快捷键在不同的导航器之间循环。 ⌘+ 0 =显示或隐藏导航器面板 ⌘+ 1 =专案 ⌘+ 2 =符号 ⌘+ 3 =查找 ⌘+ 4 =问题 ⌘+ 5 =测试 ⌘+ 6 =断点 ⌘+ 7 =报告 Xcode右侧的Utility Area也可以使用以下键盘快捷键进行切换: ⌥+⌘+ 0 =显示或隐藏实用程序区域 ⌥+⌘+ 1 =文件检查器 ⌥+⌘+ 2 =快速帮助检查器 ⌥+⌘+ 3 =身份检查器 ⌥+⌘+ 4 =属性检查器 ⌥+⌘+ 5 =大小检查器 ⌥+⌘+ 6 =连接检查器