从前,Dropbox是我生活中的重要组成部分。 将我一生中将近4年以上的照片和视频存储在Dropbox中。 使用iCloud几年后,我逐渐习惯了Apple的云存储服务。 我经常会想念一些旧照片,包括女儿在婴儿月份的照片。 我可以在电话上安装Dropbox客户端,因此我可以看到但也经常觉得我希望它们在具有Apple提供的出色用户体验的漂亮大屏幕上显示。 🤓 因此,我在Apple TV上打开了我的App Store,开始搜索是否可以使用JUST FOR BROWSING! 照片和视频。 好吧,我找到了几个可以满足我需求的应用程序。 但是臭虫! 有支付。 来吧,我只是为了浏览照片而必须购买此商品吗? 好吧,答案是肯定的。 如果您感兴趣的是多少钱–大约是5.99美元或4.99美元。 是的,我知道喝一杯咖啡是钱,而且我是个紧屁股。 judge不要判断!! 无论如何,我拒绝付那笔钱。 因此,我开始研究Dropbox API和Swift编程语言。 在几个小时内,我有了一个可以工作的原型,可以完成我想要的事情。 万岁! 🎉所以我解决了我的问题。 我现在可以使用它。 🤘 因此,我很兴奋,并告诉了我的妻子和一些朋友。 其中一位建议运送它。 哪里?! 🧐到太平洋! 不,我在开玩笑! 😁当然可以到App Store。 好吧,我认为这是个好主意,然后我开始开发我的第一个应用程序。 在业余时间里,我一直在发展自己的想法,现在我的附带项目终于在市场上出现了。 但是,嘿,我免费提供它。 我解决了我的问题,为什么我不能解决其他人的问题。 我敢肯定,还有另一个像我这样的疯狂人,在世界的另一端也想免费在Apple TV上观看他/她的照片! 任何人都想重新发现他们的旧照片或视频,或者只是想浏览。 好了,他们现在可以下载它。 如果您在App Store(Apple TV的App Store,您在其他任何地方都看不到)中搜索“云”,那么它被称为Cloud Client。您将在下面看到这个丑陋的图标。 如果您读到现在为止,非常感谢! 🙏
自动生成测试? 是的,请。 这篇文章展示了如何使用Markdown表为您的软件/应用程序编写业务逻辑 ,以及如何使用名为AcceptanceMark的命令行工具为Xcode 自动生成测试 。 但是首先,一些背景 。 您的代码可能具有以下测试形式: 单元测试 整合测试 验收测试 UI测试 阅读此处 可以很好地了解它们之间的区别。 此外,您可能有一个专门的质量检查小组,并定期手动运行您的应用程序以验证其正确性。 虽然编写好的测试对于构建高质量的软件是必不可少的,但这也需要花费很多时间。 我将向您展示如何更快地测试代码 ,以便您可以将时间花在更重要的事情上! 测试,Xcode方式 在Xcode中,可以通过子类XCTestCase编写单元测试或UI测试 。 假设您的被测系统(SUT)是一种日期格式化程序,需要使用各种可能的语言/输入日期才能正常工作。 测试类可能如下所示: 并将其自动转换为Xcode测试类吗? 好吧, 我已经编写了一个名为AcceptanceMark的工具来 完成该任务 。 只需在终端上运行此命令: amtool -i DateFormattingSimple.md 该工具将生成如下所示的Swift测试文件: 一些观察: 年 , 月 , 日 , 小时 , 分钟 , 第二列被注释为Int 。 AcceptanceMark还不支持将日期作为内置类型使用,但是可以在此处使用单独的组件,以便日期输入与格式无关。 语言列是语言环境标识符字符串。 dateStyle列是一个字符串。 dateStyle和localizedDate之间有一个空列。 这称为分隔符列 。 AcceptanceMark将其前面的所有列均视为输入,并将其之后的所有列均视为输出。 AcceptanceMark始终需要分隔符列 […]
对于每种面向对象的语言,三个概念都很突出:封装,继承和多态。 这些概念是编程语言的通用概念,但与面向对象编程紧密相关。 我决定探索Swift / Objective-C中的概念,并在C中实现它们。 某些概念在编程语言中具有不同的形式。 对于每个概念,我都会简要介绍这些概念。 C 如果您是C程序员,则可以跳过此部分。 但是您从来没有碰过C代码或感到有些生锈,这是示例中使用的语言构造的快速入门。 C有两个文件: .h —头文件,包含函数和数据声明,由客户端代码包含; .c-源代码,实现。 我们将使用指针。 指针是对内存中位置的类型化引用。 指针在类型后使用星号声明。 int *指针; 我们可以创建一个指向内存中任何内容的指针。 C中没有类,但是我们有结构。 struct Foo { 国际会员 }; 结构只能包含数据,不能包含功能。 但是我们有指向函数的指针。 struct Foo { 国际会员 无效(*功能)(无效); }; 如果您在Objective-C中使用了块,则看起来很熟悉。 C需要在使用前声明。 struct Foo; 虚函数(void); 为了方便起见,我们可以为类型创建别名。 typedef struct Foo * FooRef; // FooRef现在是Foo的指针 FooRef foo; 我们可以使用点表示法访问结构的成员。 访问指针值称为解引用。 对于结构的成员,我们可以使用->运算符。 *指针= 123; foo-> […]
Adapun Komponen 材料设计 Yang Akan Kita Bahas Pada Tulisan Kali Ini Adalah Tabs 。 Android的Seperti halnya komponen-komponen yang sudah kita bahas sebelumnya和Tabs juga merupakan komponen yang sudah sangat常见的Android应用程序。 Pertama kita perlu menambahkandependecy pada Podfile kita。 pod’MaterialComponents / Tabs’ Setelah melakukan perintah 吊舱安装 ,kita akan bisa menggunakan sebuah类yang bernama MDCTabBar 。 Dan Untuk Mulai Menggunakan MDCTabBar […]
Pada tulisan kali ini kita阿肯色曼巴球膜卡视图 seperti pada gambar di atas。 Jadi secara gamblang bisa kita katakan bahwa 卡片视图 merupakan kontainer yang dimana cirinya antara lain:Memiliki 阴影 dengan 仰角 tertentu dan juga sudut-sudut yang memiliki半径tertentu。 Untuk mengimplementasi 卡视图 pada aplikasi iOS kita 材质设计组件(MDC) , 依赖于 berikut pada Podfile pod’MaterialComponents / Cards’ Setelah melakukan perintah 吊舱安装 ,makan […]
什么是功能 ? 功能是执行特定任务的一组步骤。 函数是您在程序中使用的一种过程或例程,因此您不必重复自己。 让我们开始写一个,我会一路解释。 功能 每个功能都必须以单词func infront开头。 这就是我们声明函数的方式。 func computeShapeArea 之后,我们写出可以是任何名称的函数名称,但建议使用描述性名称,因此在较大的程序中,将更容易理解函数的用途。 func computeShapeArea(length:Int,width:Int) 之后,您可以看到我在其中添加了两个括号和一些变量。 它们是什么,它们是干什么的? 这些称为参数。 当您的函数需要一些输入数据来工作时(在这种情况下为长度和宽度来计算面积),可以使用参数。 使用它们的方法是首先选择一个名称,在这种情况下为长度和宽度,添加一个冒号,然后此参数将为数据类型,在这种情况下为整数。 func computeShapeArea(length:Int,width:Int)-> Int { } 如果要让函数返回某些内容,请编写箭头符号“->”,然后放置数据类型。 稍后我们将讨论返回数据,现在就跟我来。 在数据类型之后,您要写两个大括号。 在这些括号内,您将编写函数的功能。 func computeShapeArea(length:Int,width:Int)-> Int { 令面积=长*宽 返回区 } 功能现已完成。 现在,您可以输入数据来计算形状面积,它将存储在函数内部的area变量中,然后返回该变量。 要使用它,请在操场上写下函数的名称,如果按回车键,它将自动完成: computeShapeArea(长度:3,宽度:4) 在右侧,您应该看到函数的结果。 在此示例中,您需要输入两个值,否则该功能将不起作用。 尝试用其他数据编写其他示例。 你们中有人想知道如何使功能更精确吗? 如果您做得很棒,但是您将如何做呢? 您可以通过将参数和返回类型更改为double s来做到这一点,以便该函数将接受十进制数字,对其进行计算并返回“更精确的”值。 好的,现在让我们尝试创建一个更高级的功能。 假设您的抽屉里藏着一些钱,想买辆车,但是首先必须检查是否有足够的钱来做。 为什么要打扰,我们将编写一个函数为您检查check var myHiddenMoney = 16000 var newCarPrice […]
自Apple的Swift于2015年12月开源以来,来自世界各地的开发人员一直在要求该公司引入其核心功能的变化。 在考虑了提议之后,Swift 3.0的beta版本终于在本月发布,它带来了许多值得一试的功能。 该版本的主要目标是丰富Swift语言并增强开发经验。 从大量改进工具质量到对API进行大规模修改以及为改善Objective-C API的自动命名指南,Swift 3.0为程序员提供了很多存储空间。 在列出这些功能之前,让我们简要介绍一下什么是Swift及其如何演变。 什么是Swift? Swift是一种针对iOS,OS X,watchOS和tvOS应用程序的编程语言,它基于C和Objective-C的最佳组合而构建,不受C兼容性的限制。 Swift采用安全的编程模式,并添加了现代功能,使编程更加轻松,灵活和有趣。 Swift对Objective-C开发人员感到熟悉。 它采用了Objective-C命名参数的可读性以及Objective-C动态对象模型的强大功能。 它提供对现有Cocoa框架的无缝访问,以及与Objective-C代码的混合匹配互操作性。 它是第一种与脚本语言一样表现力和令人愉悦的工业级系统编程语言。 它支持游乐场,这是一项创新功能,使程序员可以试验Swift代码并立即查看结果,而无需构建和运行应用程序。 修订记录: 每个版本的Swift的一些主要亮点: 2016年3月21日:Swift 2.2 –删除了有关C样式for循环,++前缀和后缀运算符以及—前缀和后缀运算符的讨论。 –在“选择器表达式”部分中添加了有关Objective-C选择器的#selector语法的信息。 –在“构建配置语句”部分中添加了有关如何根据所使用的Swift版本有条件地编译代码的信息。 2015年10月20日:Swift 2.1 –更新了“通过可选链接访问属性”部分,以阐明通过可选链接进行分配的行为。 –更新了“字符串插值”和“字符串文字”部分,因为字符串插值可以包含字符串文字。 2015年9月16日:Swift 2.0 –添加了有关新尝试的信息? 将错误转换为可选值部分的关键字。 –将有关API可用性检查的信息添加到“控制流”一章的“检查API可用性”部分和“语句”一章的“可用性条件”部分。 –更新了“同时重复”部分,其中包含有关“同时重复”循环的信息。 –使用有关标记的中断语句的信息更新了“中断语句”部分。 2015年4月8日:Swift 1.2 – Swift现在具有本机Set集合类型。 –在运行时可能失败的类型转换现在使用as? 还是一样! 运算符,并使用as运算符来保证不会失败的类型转换。 –更新了协议声明以阐明协议声明的范围和成员。 2014年10月16日:mSwift 1.1 – Any类型的常量和变量现在可以包含函数实例。 更新了Any的示例,以显示如何在switch语句中检查并强制转换为函数类型。 –现在,具有原始值的枚举具有rawValue属性而不是toRaw()方法,并且具有rawValue参数而不是fromRaw()方法的失败的初始化器。 2014年8月18日:Swift 1.0 –添加了有关仅类协议的新部分。 –在“声明属性”部分中添加了有关可用性属性的信息。 –可选参数不再具有值时隐式评估为true,而没有赋值时则隐式评估为false,以避免在使用可选Bool值时产生混淆。 而是使用==或!=运算符对nil进行显式检查,以找出可选值是否包含值。 […]
原始 博客文章 : http : //shashikantjagtap.net/podcast-interview-automating-ios-apps-in-the-apple-bubble/ 最近,我接受了Joe Colantonio的播客采访,主题为“在Apple Bubble中自动化iOS应用程序”,讨论了iOS测试自动化和iOS DevOps空间的当前趋势。 Joe运行了TestTalks播客,所有有关测试自动化最佳实践的内容,到目前为止,他有199集。 他已经采访了许多行业专家,我很高兴也有机会与他进行了采访,分享了我在iOS自动化和DevOps方面的经验。 我的采访是TestTalks播客系列的第199集。 在iTunes上可以找到它,也可以在TestTalks网站上找到播客片段的详细信息。 在此播客采访中,我们涉及了iOS测试自动化和DevOps的各个主题,包括 这些天公司如何测试iOS应用程序? 如何为iOS测试自动化XCUITest Vs Appium选择工具? iOS中有哪些“行为驱动开发”选项? 如何使iOS Tests CI或DevOps友好? 如何在iOS应用程序中测试REST API? AI / ML可以测试iOS应用程序吗? 如果您要使用iOS Automation或iOS DevOps,则一定要查看此剧集。 在手机上喜欢的播客客户端中搜索“ TestTalks”第199集。 希望您会发现此情节有用。 让我知道你的想法? 我在Twitter @ Shashikant86 像XCBlog的 XCTEQ 发布的帖子一样 ? 您可能还喜欢我们的一些服务,例如访客博客或Mobile DevOps(CI / CD)或测试自动化。 在 Github 上 搜索我们的 服务 ,开源项目, 或者在 Twitter , […]
苹果根据消息,列表和便笺,锻炼,付款,VoIP呼叫,可视代码,照片,乘车预订,汽车命令,CarPlay和餐厅预订等应用程序的类型,为有限的域打开了SiriKit 意图 。 苹果在iOS 12功能中引入了Siri Shortcuts 。 Siri快捷方式是SiriKit限制的突破。 现在,您可以询问或可以训练Siri执行您的工作流程。 我们已经看到了如何创建工作流,也可以从应用程序中创建自定义工作流,但是我们大多数人都不知道我们也可以在快捷方式中进行深层链接。 快捷方式允许我们打开或运行快捷方式,打开图片库以及搜索特定类型的快捷方式。 快捷方式应用程序的URL方案为 shortcuts: // name —快捷方式的名称。 input –输入是要运行的快捷方式的字符串输入。 这些是基本参数,可用于打开或运行任何快捷方式。 让我们看看如何打开或运行任何快捷方式。 打开(不运行)特定的快捷方式 shortcuts://open-shortcut?name=[name] 运行特定的快捷方式 shortcuts://run-shortcut?name=[name]&input=[input] 简单吧? 但是我们怎么知道快捷方式是否成功运行。 苹果也提供了此功能。 x-callback-url url-回调URL负责在放弃快捷方式后发回响应。 shortcuts://x-callback-url/run-shortcut?name=[name]&x-success=[url] 回调网址可使用3个参数: x-success —处理成功的执行 x-cancel —处理执行中的中断 x-error —处理执行中的错误 您可以指定应用程序URL方案以在完成快捷方式执行后打开应用程序 shortcuts://x-callback-url/run-shortcut?name=Make%20PDF&x-success=sampleapp://status=0 注意:URL应该是URL编码的,并且应该将快捷方式添加到库中。 https://www.icloud.com/shortcuts/c5e23f99886c42d7be3883bd5df8a973 这是简单的Bluetooth TurnOn快捷方式文件。 将此添加到快捷应用程序的库中。 下面是运行快捷方式的示例代码,成功后,它将触发“ shortcutDemo:// status = 1” (URL方案:shortcutDemo)。 如果您发现这篇文章有帮助,请推荐给其他人阅读。 跟我来下一篇有趣的文章。 😇 希望您喜欢,祝您开发愉快! 如果您有新想法或建议,请在下面留下评论。 […]
如何转换UITextField输入以显示货币,以及如何转换回双精度格式以进行计算。 您要在使用货币时以正确的方式显示数据来使您的应用程序更上一层楼吗? 这篇文章解释了如何将用户输入以及计算结果从字符串转换为货币输出。 让我们开始吧! 首先,您将需要两个帮助函数:一个用于将String转换为Currency,另一个用于将Currency转换为Double,因此您可以使用数据进行计算! func convertDoubleToCurrency(amount:Double)-> String { 让numberFormatter = NumberFormatter() numberFormatter.numberStyle = .currency numberFormatter.locale = Locale.current 返回numberFormatter.string(来自:NSNumber(值:数量))! } func convertCurrencyToDouble(input:String)-> Double? { 让numberFormatter = NumberFormatter() numberFormatter.numberStyle = .currency numberFormatter.locale = Locale.current 返回numberFormatter.number(from:input)?. doubleValue } NumberFormatter类很方便,并且可以使用numberStyle实例属性将类型设置为currency! 使用locale实例属性,可以声明货币类型。 如果您使用Locale.current,则您的应用将根据您当前的位置显示货币。 但是,无论您身在何处,如果想要特定的货币怎么办? 这是固定货币的公式: let usLocale = Locale(identifier:“ en_US”) let frenchLocale =语言环境(标识符:“ fr_FR”) let germanLocale =语言环境(标识符:“ de_DE”) let […]