Tag: osx

Project6.2的借调

今天是Project6的第二天,事情开始融合在一起。 在使用NSplitView和Autolayout解决了将近3个小时之后,我终于找到了一个可行的解决方案,并且拥有Twain的裸露功能版本。 甚至更好的是,我们有基本的操作转换代码存储到Realm并编译以记录内容。 到目前为止,它在构造和解构所记录的笔记时效果很好。 还剩什么? 搜索,智能标记(将URL转换为卡片,嵌入图像,样式功能)和一些UI修饰。 注释标题尚未实时更新,并且updateAt时间戳未在父注释模型上同步。 仍然工作了2天,看到一个半可用的原型还是很令人信服的。 不好的事情:Realm不支持Swift本机类型,我忘了在类vars中添加动态功能,并且遇到了一个奇怪的问题,即打印对象将显示正确的值,但是直接读取var总是提供默认值。 NSSplitView是一个无法比拟的时间消耗。 今天花费的时间:3个小时的NSSplitView,2个小时的功能开发 总开发时间:7小时

苹果比UX更喜欢死空间

iOS 11已经发布! 是的 交互的新流动性非常好,使火花重新回到了一种可以预见的关系中……至少,在花了近两个小时对缓慢的性能进行故障排除和反复的应用崩溃之后…… 但是,同样的旧问题仍然存在,这个问题很明显并且很容易解决。 死。 空间。 也许我不是普通用户,但是我飞行时使用“ 飞行模式” ,每年大约六次 。 当我需要节省电池电量时,我会使用低功耗模式 ,这大约每周六次 。 但是要使用低功耗模式,我必须: 关闭我正在使用的任何应用程序 打开设置 向下滚动并点按电池 变更设定 关闭设置(已经厌倦了吗?) 重新打开我正在使用的任何应用程序 然后我必须重新做一遍以关闭“低功耗模式”,当以下两种情况之一时我必须这样做:1)我不需要它,或者2)屏幕过早关闭两秒钟让我发狂(严重的是,我只需要再五秒钟,为什么没有设置可以对此进行调整?)。 低功耗模式最明显的问题是,当我剩余20%的电量时,收到通知是一件好事,但是为时已晚 。 当我还有73%,6​​1%或48%的剩余时间时,我需要将其打开,以使其在一天的剩余时间内都可以使用。 这应该很容易做到。 自iOS 9以来,我们一直处于“低功耗模式”,并且在“控制中心”中仍然没有任何图标吗? 这似乎没有足够的空间。 苹果必须了解-他们不阅读我的反馈吗?! 还是rant过滤器将其发送到垃圾邮件文件夹? 还是我是这个问题上唯一的人? 不良设计的僵化不仅是iOS的问题,而且在Apple设计中也很普遍。 让我们看一下Keynote,它以牺牲用户体验为代价来增加死空间。 以色轮面板为例,它不可避免地出现在我需要看的东西上。 现在,我已经选择了一种颜色,我想为对象设置动画,哦,看看那个,同样的问题。 如果您想知道其他应用程序是如何处理此问题的,为什么不看看PowerPoint 2010(Windows版本,Mac版本已确定)。 您甚至可以取消停放动画窗格并将其放在窗口底部,从而为右侧甚至左侧的格式窗格节省空间! 还是Adobe CS4(2008)? 或几乎任何现代应用程序。 也许我只是做错了,我应该喜欢打开我的设置以打开“低功耗模式”并浏览面板。 也许我应该享受所有的死空间,而不是高效地做事的能力。 也许我不应该期望UI会迷路。 也许苹果公司需要对UX足够重视,以清除化石。

使用Swift使访客模式过时

访客模式是来自臭名昭著的“四人帮”的设计模式,我曾多次使用它来解决一些棘手的问题。 它主要解决了问题,但是我不能说我曾经喜欢访客设计模式。 它产生了许多自己的问题,您可以通过创建更复杂的访问者模式来解决。 这是我与模式有关的问题之一。 它很快变得复杂,我讨厌编写复杂的代码。 让我们看看一些情况,这些问题是我在C ++中使用访问者模式解决的,以及在使用Swift编写相同代码时如何完全避免使用访问者。 谓词编辑器 谓词是返回布尔值的运算符或函数。 以下是将两个表达式与比较运算符组合在一起的谓词: a + 3> 4-2b 在内存中,我们可以将其表示为对象树。 这里的每种颜色代表对象或类的不同类别。 在Mac OS X上,有许多应用程序示例支持通过GUI编辑器创建谓词。 一个示例是iTunes中的智能播放列表。 想象我们想用C ++创建这样的编辑器。 因此,我们需要一个GUI来允许我们组成谓词。 一旦获得谓词,我们可能希望过滤MP3歌曲列表,以查找可以归类为90年代音乐的歌曲。 让我们考虑一些简单的事情。 我们如何表达25首播放最多的歌曲的谓词? 以下是iTunes的一种方法。 因此,让我们将其范围缩小到谓词: 播放次数> 0 在C ++代码中,我们可以表示为: 表达式* plays = AttributeExpression(“ plays”); 表达式*零= ConstantExpression(0); 谓词* pred = LargerThanPredicate(plays,zero); playsongs = allsongs.filter(pred); 因此,要使用谓词,我们要处理Expression和Predicate对象。 但是,要使用GUI构建谓词,我们需要不同的对象来表示各个行的GUI。 我们可以有一个PredEditorRow类来代表每一行的GUI。 但是,有许多不同种类的行。 谓词可以任意嵌套,因此我们需要复合行。 让我们重新访问我们的第一个音乐智能列表。 90年代的音乐谓词看起来像这样: 1990 <年<1999 […]

快速状态栏图标菜单

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

返回Mac App Store

我在App Store上的一个应用程序的审阅者评论说,HyperBowl的更新频率最高,而他所见过的任何应用程序都没有可见的变化。 我认为这是一种赞美。 无论如何,有很多频繁更新的原因。 一是这些天客户期望他们。 诸如Facebook,Twitter和Pinterest之类的大人物每两周更新一次(甚至不必费心在发行说明中列出特定的更改,除非您将“错误修复”视为特定的更改)。 另一个是,与一次全部提交然后再进行提交相比,最好先进行一次提交并提交(然后修复,如果您将它们弄糟了,再进行修复)。 特别是必须经过审查过程。 但是,我喜欢频繁更新我的应用程序的主要原因是,我记得该怎么做,以便跟上有助于或破坏构建的更改。 以Mac App Store版本的HyperBowl为例,我一年多没有更新。 我完全忘记了如何使用Unity来构建Mac App Store应用程序,因此我不得不重新阅读Unity文档,该文档的更新时间甚至比我的应用程序还要长。 例如,它建议使用第三方工具,该工具几年未更新,仅以未记录的github形式存在。 看来Mac App Store在Unity的优先级列表上并不高。 公平地讲,Mac App Store在苹果的优先列表中似乎也不高。 有迹象表明,自从上次更新以来,用于签名您的证书已经过期,已经很久了,但是当我转到证书管理页面时,您无法为Mac App Store创建或创建近十种证书。 但是,如果您在Xcode中打开“首选项”窗口,则它们是: 并且一旦创建了Mac证书,便可以使用它们对应用程序和安装程序进行签名(我将这些命令放入Shell脚本中,以便在Unity构建后运行)。 codesign -force -sign“第三方Mac开发人员应用程序:Technicat,LLC” —权利HyperBowl.entitlements HyperBowl.app/Contents/Frameworks/MonoEmbedRuntime/osx/libmono.0.dylib codesign -force -sign“第三方Mac开发人员应用程序:Technicat,LLC” —权利HyperBowl.entitlements HyperBowl.app/Contents/Frameworks/MonoEmbedRuntime/osx/libmonoPosixHelper.dylib codesign -force -sign“第三方Mac开发人员应用程序:Technicat,LLC” —权利HyperBowl.entitlements HyperBowl.app productbuild -component HyperBowl.app / Applications-签名“第三方Mac开发人员安装程序:Technicat,LLC” HyperBowl.pkg 权利文件只是列出了沙盒权利的一个plist: com.apple.security.app-sandbox 在构建之前,需要自定义应用程序的info.plist。 最好在播放器设置中使用它,但是在此之前,各种开发人员都在拼凑自己的程序。 我从论坛线程中获取了后处理构建脚本,并将其细化到最低限度。 使用System.Collections; 使用System.Collections.Generic; […]

如何从Appstore下载旧版本的最新iOS应用程序

通常,我们需要在Appstore上使用旧版本的现有应用程序。 这可能是出于测试目的,或者说是要从当前版本降级为更稳定,兼容且体积较小的以前版本的应用程序。 在本文中,我将向您展示如何使用Charles Proxy下载较旧版本的实时应用程序。 我已经考虑过本文中名为HMH eTextbooks的应用程序。 您可以在Appstore上找到有关此应用的更多信息。 该应用的当前版本是4.1。 我将向您展示如何检索此应用的旧版2.0 。 因此,朋友让我们开始吧: 步骤1:下载Charles 代理 ,安装它并将其移动到应用程序文件夹。 从应用程序启动Charles,根据需要授予权限。 第2步:打开iTunes→应用程序商店→搜索您的应用程序→转到说明并同时打开查尔斯窗口和iTunes窗口。 步骤3:在iTunes中单击“下载”,在Charles的“结构”部分中观看下载活动。 您应该看到一个“购买”服务器。 第4步:右键单击购买服务器, 启用S​​SL代理。选择并停止在iTunes中下载您的应用。 步骤5:在Charles中,转到“帮助”-> SSL代理->安装Charles Root证书->添加然后打开“钥匙串访问”->搜索“ Charles Proxy CA”->双击它->更改为始终信任。 步骤6:在iTunes中再次搜索该应用,然后再次下载该应用。 再次取消下载。单击“购买”服务器旁边的显示三角形,然后单击buyProduct。 步骤7:单击Content(内容)选项卡,右键单击buyProduct,然后单击Export(导出)。 选择桌面作为导出位置,选择XML格式,然后单击保存。 步骤8:使用文本编辑器打开XML文件,然后向下滚动以找到整数,如屏幕截图所示: 注意:这些是应用程序的版本号。最后一个是最新版本。我想要最旧的版本,所以我复制了第一个。您可以根据需要选择。复制文本后关闭文本编辑器。 步骤9:返回Charles,单击buyProduct并选择Charles屏幕顶部的EDIT图标。 步骤10:点击Text(文本),然后在下的页面顶部附近找到以下行: appExtVrsId 在此行下方,您将看到写在标记内的数字值。 粘贴您在步骤8中复制的值以替换显示的值。 完成后,单击屏幕底部的“执行”按钮。 步骤11:在Contents(内容)选项卡下向下滚动,您应该看到 bundleShortVersionString 在其下,您将看到所需应用程序的实际数字版本。 您可以重复此过程,直到获得所需的特定版本。 步骤12:右键单击“购买”服务器下列表中的最后一个buyProduct,然后单击Breakpoints(断点)以启用断点。 步骤13:在iTunes中,再次搜索您的应用程序以刷新页面,并再次下载您的应用程序。专注于查尔斯,单击编辑请求→XML文本并粘贴我们在步骤8中复制的版本ID,单击执行按钮作为断点启用,再次按执行按钮。 步骤14:下载应已完成所需版本的应用程序。右键单击已下载的应用程序,然后单击获取信息以验证版本。 步骤15:将您的设备连接到MAC,然后将下载的应用安装到您的设备。 注意 :确保设备未安装最新版本的应用。如果是,请删除该版本,然后安装应用的下载版本。 步骤16:关闭Charles和iTunes,并根据需要使用您的应用程序。 结论: 希望这对正在努力寻找现有应用程序旧版本的人们有所帮助。 如果您知道其他选择,请分享评论。

探索NSTextField

最近,我正在一个简单的待办事项列表应用程序中玩NSTextField。 我想在每个待办事项中包含一个可编辑的文本字符串。 我写这篇文章是为了谈论我一直在申请的东西。 建立项目 这是一个待办事项列表,我将使用NSCollectionView构建基本的UI。 该布局是一个简单的基于行的垂直布局。 我可以使用NSCollectionViewFlowLayout轻松实现这一点。 显示待办事项 由于我要显示的待办事项内容非常简单,因此我选择一个NSTextField作为容器。 我还将默认textField变量链接到放置在该项目中的NSTextField组件。 现在,我可以通过设置“ textField?.stringValue ”轻松显示待办事项。 NSTextFieldDelegate中的回调 该协议实际上是NSControlTextEditingDelegate的扩展,其中提供了一些基于NSControl的委托方法,这些方法仅适用于文本编辑功能。 默认协议方法提供了在编辑文本内容之前和之后的挂钩。 通过编辑,这意味着在更改内容时在键盘上键入。 实际上,我想在单击该项目时收到通知。 然后,我可以修改内容,然后按“ Return ”以保存更改。 子类化NSTextField 为了通过单击该项目获得通知,我将在NSTextField中重写成为firstFirstResponder() 。 我还创建了相应的委托方法,以便可以在单击项目的基础上进行更改,例如显示插入符号或将应用程序更改为编辑模式等。 拦截返回键 这是通过实现有关命令选择器的委托方法来完成的。 每个键盘命令键都会生成此方法的回调。 通过比较当前的命令选择器,当按下“ Return ”键时,我会收到通知,命令选择器为“ insertNewline(_ 🙂 ”。 然后,我可以保存待办事项,然后更改回查看模式,等等。 摘要 NSTextField的工作逻辑与iOS的UITextField完全不同。 NSTextField委托的文档非常含糊。 在实现您的欲望逻辑之前,应该更谨慎一些,并回避这些回调。

放下故事板

每年在WWDC上,Apple都会大张旗鼓和鼓掌地宣传Interface Builder的新功能,通常是在顶级会议中,例如大型的“国情咨文”会议。 如果您在Interface Builder中布置视图,则是个好消息。 同时,如果您在代码中布置视图,则新功能很少而且相差很远。 iOS 9中引入的关于在代码中创建自动布局约束的新语法的唯一提及是在15分钟内被塞进了名为“自动布局之谜,第二部分”的会话中! 不完全是黄金时间。 真遗憾的是,Apple没有提倡更多地在代码中布局视图,并且没有以与更新Interface Builder相同的速度来改进这样做的工具。 在代码中放置视图可以真正提高生产力,并且可以很好地提高代码的整体质量。 为什么不只使用Interface Builder? 有许多原因应避免使用Interface Builder,其中一些原因与编写代码的优势有关,而某些原因与Storyboards和Interface Builder的缺点有关。 我将在这里讨论一些关键问题。 除非我特别提到情节提要,否则下面将仅使用术语“ 界面生成器” ,因为大多数问题都与所有情况有关。 首先,Interface Builder文件只能由Xcode生成和读取。 您可以将文件读取为XML,但是它们没有什么意义,或者至少,XML本身对事物的实际布局没有多大帮助。 当您发生合并冲突时,这会带来问题,对于包含许多视图控制器信息的情节提要,合并冲突会变得非常严峻。 您可以无意中更改视图或视图控制器的布局,这可以通过单击错误或打开文件来实现。 Interface Builder通常只是因为打开文件而对文件进行了更改。 当查看差异时,很难将其与您自己的更改区分开来,也很难进行推理。 换句话说,更改可能很难(在提交之前由您自己审核,而在进行代码审核时则由团队伙伴审核)。 由于Xcode幕后发生的所有变化都会使臭虫迷失,因此臭虫可能会被发现而未被发现。 Interface Builder的一个基本问题是,您在界面中看到的大部分内容都是视图的设计时快照。 您可以修饰视图以使其看起来像实时运行。 例如,从文件或服务器获取并仅在运行时加载的任何数据都必须在设计时进行模拟,并在运行时由实际数据替换,或者完全不在设计之列,这会破坏视觉布局的意义。 。 这将模拟数据与您实际想要显示在应用程序中的设计时数据混合在一起。 换句话说,您必须拆除设计时布局并在运行时构建运行时布局。 仅在设计应用程序时供您查看的数据很容易泄漏并成为运行时数据,这是非常不幸的。 您在Interface Builder中设置的某些属性只是更好地在代码中设置。 为了您自己,或者为了任何人继承您的代码。 颜色和字体是要在代码中以一种或另一种方式定义为常量的事物的绝佳示例。 如果它们将来会发生变化,我不会羡慕那些必须通过所有观点来选择新颜色或新字体的人。 如果您确实在代码中定义它们,则当前无法在Interface Builder中引用它们。 无论您做什么,都会有很多挑选的颜色和字体。 如果在Interface Builder中只保留设计中的字体和颜色,而仅在代码中进行设置,那么这将违反Interface Builder的目的。 代码对Interface Builder中对象的引用通常由字符串标识符组成,在这些字符串标识符上没有编译时检查。 如果您更改,删除或错误拼写了任何这些字符串,则可能会导致应用程序在运行时崩溃或停滞。 如果您没有在发布前测试确切的代码路径,那么您会感到不满意。 当您使用Interface Builder时,Swift由于强大的键入和编译时间检查而带给我们的许多代码安全性会丢失。 […]

Swift 3.0或Swift 2.3最低系统版本要求,并在iOS 7中部署

Swift 3.0将提供Xcode 8,使用Swift 3.0所需的最低iOS / OS X系统版本是多less? 那个swift 3.0支持iOS 7吗?

Hackhactons中的iOS开发与未知的开发者? 如何共享Xcode和debugging工具给没有OSX设备的人?

我错误地提出了由于类似的线程在这里closures,但现在这个线程是完全不同的,有关快速发展的事件称为Hackhacktons,在那里你遇到与misc设备陌生人。 通常情况下,我们使用Android进行开发,因为不想让任何人离开,但iOS会非常酷,现在正在努力使之成为可能。 随着新的Mountain Lion和ScreenSharing,显然有可能开发iOS应用程序而不实际拥有OSx。 未解 III。 Mountain Lion和VNC:这种select与购买非虚拟苹果产品如Apple Airs有什么不同? debugging与VNC没有区别,不是吗? 五,我的朋友说Mac Mini实际上function非常强大,所以我可以把Xcode拿到很多不知名的黑客开发者那里,我们没有时间安装。 正确? VI。 没有服务器的Mac Mini是否对用户数量有一些限制? 我想向不拥有OSX设备的协作者提供Xcode和debugging工具。 解决了 I. [bames53,是]如何在function强大的Apple Desktop Mac Pro计算机上运行Apple服务器, 然后closures工作站? 工作站可以运行诸如Windows,Debian,Ubuntus和OpenBSD之类的东西吗? 所以开发者可以保留自己的机器,而不需要向苹果的产品转移任何成本,可能呢? II。 [bames53,no]如果有10位开发人员使用苹果服务器或99美元10美元,我是否需要每年支付99美元? IV。 [bames53,no]是否有任何苹果产品与3G像x220,我可以使用哈克哈顿热点?