Tag: mac地址

迅速为大家

尝试已经2天了! 迅速的东京结束了。 尽管这次会议非常壮观,但我很荣幸与一群真正令人惊奇的人分享了舞台,但我学到的最大的教训是技术上的不足,但更为重要。 会议的总结演讲是我的新朋友井上真由子(Mayuko Inoue)所作的非凡演讲,题目为“向下一代Apple开发人员伸出援助之手”,同时以日语和英语进行。 我确定进行此演示是技术上的噩梦,但是Mayuko完美无瑕地进行了演示。 不用说,我被定罪了。 我发掘出的她的演讲稿(上传时会通过链接更新),我害怕这种根深蒂固的傲慢态度。 本质上,进入软件工程领域存在障碍。 尽管我认为大多数人都同意这是不幸的,但我注意到了我的反应。 “很好,”我开始思考,“我必须忍受痛苦,学习并且要有足够的智慧才能到达自己的位置。 当我意识到自己正在经历的事情时,我注意到了这一点,以便以后进行冥想。 几乎每个人都听说过沸腾的螃蟹的寓言,如果您有一锅螃蟹并打开火锅,它们会开始大声疾呼逃逸,但由于每个人都在寻找自己,所以会把其他人拉倒它企图自救,导致无人逃脱,所有人都被烧死。 然而,这种自私的态度渗透到科技行业。 我相信我们从本质上将他人视为威胁。 有些人毕业于常春藤盟校,并在进入软件之前进行过高调的实习,也许他们认为其他人对所编写软件的质量构成威胁。 有些人可能会觉得自己不配得到“接受”,也许他们患有冒名顶替综合症,觉得有些人对其稳定构成威胁。 至于我自己,我曾经生活在贫困线以下,几乎不到我整个成年生活的一百美元。 我竭尽全力争取自己现在所处的位置。 而且,如果我要说实话,我认为我将他人视为对为什么我必须付出很大努力才能实现自己的地位的威胁。 但归根结底,我们所有人都需要意识到,存在着为人民服务的技术。 所有人 作为那些“成功”追随Mayuko的榜样并将自己的手伸向尚未出现的其他人的人,这是我们的责任。 我们有时间,我们有资源,我们有专业知识。 因此,为了帮助他人,我决定做两件事: 首先,我将开始一个名为Swift for Everyone的系列,这是直播的教育编码内容,目的是解决有趣的挑战,并向人们教育成为iOS工程师的意义。 我希望它是交互式的,因此有机会在聊天中提出问题并向其他人学习。 (在此链接上订阅或在Twitter上关注我,以便在启动时收到通知) 其次,我已经决定要聘用受训人员,以帮助他们进行一般的iOS开发,职业建议,简历帮助以及使更多人进入该行业所需的任何其他事项。 我特别建议那些人数不足的团体或那些努力获取必要资源的人申请。 我无法接受所有人,但是根据成功的程度,我想每3-6个月重复一次。 如果您不是本地人,但仍然有兴趣,请继续申请! 我们将找出屏幕共享或其他内容。 (使用此链接可以申请或与他人共享) 我一个人做不到。 但是我可以做点什么。 而且,如果您现在正在阅读此书,并且意识到自己正处于一个可以为其他想要开始该行业的人提供东西的地方,请加入我的行列。 某人甚至可能都不知道寻求您的帮助,因此,积极主动地寻找可以帮助您成功的人,您很可能会为需要帮助的人带来改变。 如果那还不足以帮助某人……我们为什么还要在这里? 我们开工吧。

我如何在2周内从零应用程序开发经验发展为1万2千次销售

许多人都在幻想只有大大小小的老牌公司才能将其内容发布到AppStore上。 其中,只有最优惠的票价。 尽管这可能主要是正确的,并且肯定已经存在很长时间了,但这并不是100%可以肯定的事实。 独立开发者必须踏入大门,并在其中扬名。 这不是我获得成功的方式,我离那很远。 这是一篇关于我如何开始这一旅程以及如何到达现在的位置的文章。 我还很年轻,我是一名大学生,而且我只是在做兼职。 这意味着我没有像其他许多大型公司那样花太多时间在iOS和OS X开发上。 在许多人会以每周9-5天,每周5天的方式执行此操作的情况下,我正在以每周7天,每天5-9次的方式进行操作。 通过减少其他活动来弥补浪费的时间。 减少“乐趣”,增加我的知识基础。 早在2015年7月,我购买了Apple Developer License,这是一笔相当可观的投资,我觉得我需要做一些值得弥补的事情。 让我弄清楚这一点,我确实具有先验的编码和编程知识,我来自计算机科学背景,并且具有C,Java,PHP,SQL,HTML,CSS,Haskell等方面的经验。但是,iOS(Obj-C和Swift)对我来说是一个全新的世界。 尽管许多学习新语言的人会寻找课程或教程,但我发现这是一项艰巨且费时的工作,到最后我可能还没有学到太多。 相反,我直接进入Xcode,首先使用Interface Builder,然后通过创建小的简单函数,Fibonacci Sequence生成器和各种计算器来了解Swift的语言是如何构造的。 我一点都不喜欢Interface Builder。 直到今天,我仍然觉得它太笨拙了,一团糟无法使用(意外删除具有IB插座的对象会使整个项目变得无用,还有其他缺陷)。 随着时间的流逝,我发现Xcode的自动完成功能是其最有用的功能之一。 它打开了将未发现的库作为选项提供的可能性,我很热心尝试了这一选项。 大约一个月左右后,我在AppStore上发布了我的第一个应用程序。 2048级克隆,带有关卡选项和炫酷的动画。 我从中获得的6美元被我从中获得的经验所掩盖。 诚然,这里没有什么值得骄傲的,但是将应用程序放到AppStore上对我来说意义重大,我的名字在那里,我的产品在别人的手机上,至今仍然让我震惊我做的东西被世界某个地方的人使用。 快进了一个月,然后我整理了一个任务管理器/便笺混合程序,这是我的第一个合适的应用程序,我对该应用程序进行了零营销,并了解到促销确实有很大的不同,从总共4次下载,到一天在我在Reddit上推广时的2k次下载)……这使我进入了我的下一个应用程序,即Reddit客户端。 我一直想建立一个Reddit客户,只要我记得(那是大学内部的求职者所说的),但是从来没有考虑过要这样做。 我怎么能? Reddit如此庞大,而我却很小。 虽然我的想法告诉我这将是一次失败,但我却有所不同。 我不想让一个应用程序成功,我想让一个应用程序满足我的需要。 我需要一个Reddit客户端,该客户端需要按照自己的方式进行配置,并在其中灌输设计思想,并灌输我的想法。 这不是给别人的,是给我的 。 我在互联网上搜寻有关使用JSON数据,与服务器进行通信,利用API以及与已建立的服务进行接口的其余部分的文章,然后我慢慢学习并收集了足够的信息,以尝试创建初始的“首页”(时间表)。 在我看来,让应用程序显示Reddit数据是一个巨大的步骤,这意味着它正在运行。 以前仅制作了一个非常简单的游戏和一个Notes应用程序,这真是太好了。 看起来很破损,但是正在工作。 这绝对是朝正确方向迈出的一步。 几天过去了,我添加了更多内容,包括过滤器,图像缩略图,文本格式,设计增强等。直到有一天,我看着它,并认为:“ 嘿,这实际上是AppStore的一个有力竞争者,但并不是因此,我从为自己创建它到通过TestFlight打开Beta版,这样我也可以得到其他人的意见。 反馈是非常积极的。 我还在Reddit本身的各个子索引上发布了该应用程序的屏幕截图,这有助于投影该应用程序,并使更多的受众实际使用它。 我正在接受所有人加入Beta计划的要求,有人提出要求。 分配的2,000个广告位在几天之内就被填满,很快有人要求如果有人退出测试版,请进入测试版。 这很好,因为这意味着人们实际上想成为其中的一部分。 人们想要我的应用。 整个过程花了我大约4个月的时间(我已于2015年11月下旬开始,并于2016年3月初完成,未计入因社交活动和疾病所花费的时间)。 我从中学到了很多东西,包括如何填充表格视图,如何合并滑动手势,如何获取和显示数据,如何处理Xcode问题,如何设置配置文件和捆绑标识符,如何销售产品,但最重要的是,如何克服障碍。 每天都有很多事情,但是如果我让一个问题困扰我,如果允许一个问题使我失望,我就不会完成。 我不会将Milkeddit带入AppStore。 […]

快速状态栏图标菜单

我之所以写本教程,是因为我的应用程序Blinkk(http://ralcr.com/blinkk/)需要一个,并且在网上搜索了一个教程,这很自然,但是一切看起来都很复杂,无法进行任何工作。 所以复制/粘贴解决方案是不可能的,我决定了解它是如何以编程方式工作的,最终变得非常简单。 我对插座和Xib没问题,但是为简单菜单而需要连接它们的方式使我感到紧张,我没有耐心去学习比UI元素或动作更重要的东西。 因此,这就是您所需要的,可以将其放置在applicationDidFinishLaunching中 我遇到的问题: 应该强烈引用item var,否则您将看到图标从状态栏中消失 启用项目将目标添加到每个NSMenuItem

如何记录您的iPhone屏幕

Quicktime>新电影录制>将源更改为iPhone 我已经被问过几次这个问题,所以我最终决定写下我的答案。 这很容易。 只需将手机插入Mac(必须将其插入,因此无需无线录音) 打开Quicktime,然后选择“文件”>“新电影录制” “记录”按钮旁边有一个白色的下拉箭头。 选择您的iPhone,它将刷新窗口并显示您的实时iPhone屏幕。 单击录制开始录制。 完成后,请确保以1080p导出。 如果您是视觉学习者,我就录制了一段简短的视频。

Xcode iOS Xcode无线部署

当我们使用Xcode进行应用程序开发时,通常将我们的iOS设备绑定到Mac上以部署应用程序,但是Xcode 9引入了“无线部署-调试”,这份5分钟的指南将帮助您进行设置。 切换到无线。 Xcode 9+ IDE 苹果系统 无线网络 iOS 10+设备 从finder或Xcode最近的项目中打开您的Project_Name.xcodeproj文件。 选择主project_name,然后一般检查是否有任何错误或警告。 将iPhone或iPad连接到Mac,然后按“信任此计算机”。 无线部署设备列表 检查“设备”列表,其中将显示所有可用于运行的设备和模拟器。 当您的iOS设备显示时,您可以选择窗口 -> 设备和模拟器 ,这将使显示成为一个新的弹出窗口。 无线部署位置 在选择设备屏幕中选择iOS设备 。 选中通过网络连接选项。 就是这样,除非您想为不支持无线充电的iOS设备充电,否则就不会再打乱电线了。 应用程序设备窗口 通过电缆断开iOS设备的连接,现在在Xcode设备选择屏幕中,它将在设备名称旁边显示一个网络图标。 注意:要使无线部署正常工作,工作站和iOS设备都应通过无线路由器或移动热点连接在同一网络上。 设备列表成功 最初发布在 kautilya.design上 。

如何为Ionic 3开发准备Linux / MacOS包装盒

本指南假定您的计算机的操作系统对于Mac用户是High Sierra 10.13.3 ,对于Linux用户是Ubuntu 16.04 。 如果使用Linux发行版,请跳过iOS部分并继续至Android部分。 安装NodeJS 从以下链接下载并安装最新的LTS NodeJS: https://nodejs.org/en/ 注意:在编写本指南时, NodeJS的最新LTS版本是8.10.0 。 安装CLI 要安装全局依赖项,请运行: $ npm install -g离子科尔多瓦 注意:此命令将安装最新版本的Ionic和Cordova。 在撰写本指南时, Ionic的最新版本为3.20.0,而Cordova的最新版本为7.1.0 。 适用于iOS和Android平台的SDK环境 要准备添加和构建iOS和Android平台,请执行以下步骤。 的iOS iOS平台只能在MacOS上添加。 如果您不使用MacOS,请跳过此步骤并继续至Android部分。 安装Xcode 访问: https://developer.apple.com/xcode/ 并安装最新的Xcode版本。 安装CocoaPods 在您的终端上,执行以下命令以安装最新版本的CocoaPods。 $ sudo gem install cocoapods 启用命令行工具 安装Xcode后,需要启用几个命令行工具以使Cordova运行。 在您的终端上,运行: $ xcode-select-安装 有关iOS要求的更多信息,请访问: https://cordova.apache.org/docs/en/7.x/guide/platforms/ios/ 安卓 安装Java SE开发套件8(JDK) 访问Oracle网站并安装Java SE Development Kit 8。 […]

序列化自定义词典

更新:新的Swift 4过度简化了此过程, 请查看如何 通过Swift 字典和NSDictionary编码之间的自动桥接,更常见的String到Object字典非常简单。 但是,当我们想使用任意对象作为键时,情况会发生变化。 常规词典仅对键类型强制实施可哈希和等价协议。 如果我们要构建持久性类,则可以从NSObject继承这些属性。 另外,我们需要实现NSCoding进行序列化。 类项目:NSObject,NSCoding {…}各种数量:[Item:Int] 使用NSKeyedArchiver保存该对象的方式应为: 让_ = NSKeyedArchiver.archiveRootObject(self,toFile:file) 但是,当尝试还原实例时,会发生一个模糊的错误: 让restore = NSKeyedUnarchiver.unarchiveObject(withFile:file) //例外:[MyClassName copyWithZone:]无法识别的选择器发送到实例 事实证明,由于某种原因,NSDictionary还要求密钥类型符合NSCopying。 一个简单的实现可以解决: 类项目:NSObject,NSCoding,NSCopying { func copy(with zone:NSZone?= nil)->任何{ 返回项目(名称:名称,库存:库存) } … 这是一个完整的工作示例:

在任何Mac上获得触控栏功能

我不知道你们是否已经知道此功能,至少我没有在网上看到它。 您可以在任何运行macOS Sierra的Mac上启用屏幕触摸栏,当然您不能用手指触摸😉。 但是,如果您是一位软件工程师(我们喜欢快捷方式😎),尤其方便。 这是在屏幕上显示触摸栏的方法。 打开你的Xcode 从菜单窗口中选择->显示触摸栏(cmd + shift + 5) 我正在使用Xcode 9.2,不确定此选项在以前的版本中是否可用。 我也只在Xcode中找到了这个选项。 启用后,它便可以与其他任何应用程序一起使用。 在退出Xcode之前,您会在触摸栏中获得快捷方式,具体取决于您使用的应用程序。 试试看,玩得开心😊。

4行代码的iOS录音机

从Creo 2.0.4开始,新的AudioRecorder类已可用。 通过此类,开发录音机非常简单。 我们将通过在主设计板上添加AudioRecorder类(将自动创建一个AudioRecorder1实例),然后添加三个按钮来开始/停止录制以及播放录制的音频,从而开始本教程: Timer1 Action事件如下所示: 现在,我们要在Chart控件中可视化归一化的值流(从0到100)。 因此,让我们开始创建一个数据集,该数据集以后可以由我们的图表使用。 从控件列表中将DataSet对象拖放到Window1中,并将其重命名为更具描述性的AudioDataSet。 设置自定义数据集非常简单,需要填写三个事件: 行 (此事件应返回数据集中可用行的数量) 列 (此事件应返回数据集中可用列的数量) 值(行,列) (此事件应基于行/列参数返回实际值) 为了使我们的代码尽可能简单,我们的数据集将基于数组,并且我们将定义数组的最大大小,一旦超过该大小,便会从头开始重新使用数组(我们不需要历史记录图表的数据,我们只需要显示当前值)。 满足所有这些要求,我们可以从向AudioDataSet对象添加三个属性开始: r = [] (这是我们的数组) maxSize = 10 (这是r的最大大小,该值应在运行时计算(设备框架宽度/条项目宽度) i = 0 (要写入r数组的下一个值的索引) 我们还需要添加一个辅助函数以将值添加到我们的r数组中。 我们的addValue(v)方法如下所示: 需要正确配置Chart1,我将所有详细信息的描述保留在项目文件中。 这里只是一些注意事项: 数据集必须配置为AudioDataSet 必须将“图表类型”设置为“条形图”,并且必须取消选中“使用动画”复选框(我们将每秒更新此图表10次,在这种情况下动画将成为瓶颈) 自动范围必须禁用 现在,我们有了应用程序中所需的所有对象。 仅错过了最后一步,在Timer1 Action事件中,我们需要将计算值添加到AudioDataSet,然后重新加载Chart1。 Timer1 Action事件如下所示: 最终应用看起来像: 可以从我们的GitHub存储库下载Creo项目:https://github.com/creoapp/examples/raw/master/AudioRecorder.zip

执行动作,不要停止执行

正确使用调试工具可以帮助开发人员节省大量时间。 例如,考虑最基本的断点:它使我们能够暂停程序的执行,以便逐步对其进行分析。 现在,只需考虑通过手动在每行上添加输出到控制台来执行该过程所花费的时间。 事情很快就会变得一发不可收拾,难以管理。 事实证明,我们大多数人习惯的标准断点只是冰山一角,而且Xcode拥有一整套方便的工具,旨在加快调试工作流程。 让我们从我们大多数人已经经历过几次的事情开始:我们设置一个断点,当它被触发时,我们键入一个命令,例如po myVariable ,然后继续执行。 当然,如果我们需要执行多次以上,此手动操作将变得非常繁琐。 幸运的是,将其自动化非常简单: 右键单击断点>“编辑断点…” 点击“添加动作” 选择“调试器命令” 输入您的命令 选中“评估操作后自动继续” 从现在开始,无论何时触发此断点,都将执行自定义调试器命令,并且此后将立即恢复执行,从而无需进行任何手动操作。 节省了很多时间👍 有时我们希望仅在满足特定条件时才触发断点。 再一次使用“ Edit Breakpoint…”,设置这样的条件非常容易: 在此示例中,条件非常简单,但是可以使用布尔运算符( && , || , ! ,…)执行函数调用,因此可以更轻松地处理更复杂的表达式。 相反,有些时候我们希望断点仅从第二次触发就停止执行。 例如,考虑一下在创建对象时第一次调用该函数,然后在事件发生时再次调用的函数。 如果我们只想调试第二种调用,最好过滤掉第一种。 再次使用“编辑断点…”选项已经在等待我们: 当引发异常或错误并没有捕获到异常或错误时,应用程序崩溃,并且调用堆栈被打印到控制台。 此输出通常对于识别错误的来源非常有帮助,但实际上并不允许检查引发错误的情况。 那是一种新的断点开始起作用的时候。 到现在为止,我们使用的所有断点都以某种方式固定在我们的代码上,这意味着它们已在应用程序的特定行上显式设置。 为了设置在发生错误时触发的断点,我们需要查看符号断点的侧面,这意味着不与特定行链接的断点,而是与定义良好的事件相关的断点,在本例中为发生错误。 为此,Xcode已经提供了两种此类断点,具体取决于您是否对Swift或Objective-C错误感兴趣: 很棒的事情是,您还可以编辑它们,以便通过过滤特定的Swift.Error类型或在引发错误或Swift.Error错误时触发来使它们更加适合您的需求。 异常和错误断点是一种特殊的符号断点,但是也可以定义更多的通用断点。 例如,可以创建一个断点,该断点将在控制器上调用viewDidLoad()时触发: 当您知道正在调用某个方法(例如,一个模态控制器被关闭)并且您试图查明此调用的源时,这可能是一个非常有用的工具。 我们所有人都面临着AutoLayout问题。 通常,我们通过控制台错误消息了解这些运行时问题,这些错误消息指出自动布局引擎“无法同时满足约束条件”。 但是,在复杂的应用程序中,要弄清楚哪个视图恰好触发了错误,可能会很复杂。 查明根本原因的一种好方法是在项目中添加“约束错误断点”。 然后,每当发生新的自动布局问题时,断点将自动触发👌 Xcode 11中的新增功能,引入了一种新型的符号断点。 它称为“运行时问题断点”,实际上实现了以前必须在编译方案中启用的检查。 其中,您会找到一个“主线程检查器”,该“主线程检查器”将在从后台线程访问UIKit或AppKit对象时被触发,或者会找到一个“线程清理程序”来帮助您检测竞争状况。 当您考虑它时,断点就是专注于应用程序代码的构造。 但是,应用程序是由代码和数据组成的,因此具有等同于断点的功能当然很有用,以便观察数据在应用程序运行时如何变化。 碰巧的是,这样的构造在Xcode中已经可用,尽管它不像断点那样可见,它被称为watchpoint 。 […]