最佳SoftwareHut的iOS实践-SoftwareHut

尽管2017年Android应用程序的下载频率是iOS应用程序的两倍,但后者也受到广泛欢迎。 但是,Apple设备的普及率在增长,对iOS开发人员的需求也在增长。 如果您是或想成为其中的一员,那么本文适合您,因为我将向您展示最佳的iOS做法。 他们将帮助您开发更好的应用程序。 准备? 我将上述做法分为以下几节: 通用技术概念 代码质量 性能 构架 建筑 其他有用的提示和技巧 在本节中,我只为您提供三个词: SOLID —单职责原则,开放/封闭原则,Liskov替代原则,接口隔离原则,依赖反转原则 吻 —保持简单,愚蠢 干 -不要重复自己 首先,您应该遵循为Swift和Objective-C准备的代码样式指南。 这很重要,尤其是当只有几个程序员在开发同一应用程序时。 这就像成立一个音乐乐队一样-如果每个人都做自己的事,他们将不会成功,开发团队也是如此。 如果您可以在深夜重复这些指南中的建议,则可以继续进行下一步-自动执行构建。 使用Fastlane将每个项目配置为自动生成,然后将其上传到HockeyApp。 最后,在单个视图控制器中避免大量代码。 您可以使用VIPER或MVVM体系结构来完成此操作。 尽管iOS设备运行速度非常快,并且无论它们有多老,它们都可以正常运行,但是您的应用程序无法降低它们的速度。 您可以通过以下方法提高应用程序的性能和可维护性: 尝试避免使用外部UI库 尽早确定最低iOS版本-记住检查旧系统上新的iOS API是否得到正确处理 集成崩溃报告工具 使用这些框架可以使您的工作更轻松,更快和更好。 联网 AF网络 Alamofire 楷模 对象映射器 披风 依赖注入 弹射 台风 专卖店 钥匙串访问 领域 通过逻辑结构来开始您的项目。 它的结构应反映您存储库中的目录结构。 关于文件夹名称-它们应该为小写字母,并且空格应替换为“ _”。 使项目的层次结构反映您的体系结构,即: UI:包含对自定义UIView,UIViewController和容器的引用: 视图:自定义UIView,UITableViewCells等 View_controllers:UIViewControllers 应用程序:AppDelegate Supporting_files:info.plist和其他描述应用程序的文件 […]

第一次局部反射

我最喜欢的学习经验是设计应用程序并在xcode上编码,因为数字表达是我最发达的领域之一。 我得到的主要支持是我的老师,然后是在这方面有知识的朋友,然后,如果我有任何疑问,可以在互联网上咨询他们,以获得帮助。 对我来说,最困难的部分是编码部分,因为在尝试记住编码并主要了解它们的时候确实很困难。 我最高兴的是,我为毫无挑战地进行挑战2感到骄傲,这个挑战是关于制造密码制造者,用销售,文本,按钮等连接代码。 我接下来要学习的下一个挑战是在Xcode中创建条件,例如,如果汽车为红色,则当我触摸按钮时,汽车将变为蓝色。

SQLPro —年度回顾2017

我看到其他一些开发人员在评论中发表了一年的评论,发现它们很有趣。 以下是有关SQLPro的运行情况的一些统计信息。 收入 2017年是有记录以来最好的一年,网站销售领先。 网站 在2017年的大部分时间里,SQLPro一直在使用Fastspring作为其销售提供商。一些产品由于具有一些有趣的功能,已经过渡到Paddle。 Fastspring和Paddle都使在线销售产品变得非常容易。 Setapp SQLPro Studio于2017年3月加入Setapp。收入逐月增加,并且IMO没有从其他来源获得任何收入。 Setapp通过两种方式提供收入。 首先是应用使用情况,这是SQLPro大部分收入的产生方式。 其次是推荐收入(我很自豪地获得了一笔注册收入)。 如果您有兴趣尝试Setapp,请尝试一下我的推荐。 https://go.setapp.com/stp146 Windows App Store 我在2016年末,2017年初将脚趾浸入Windows应用程序商店。这些图表中的数字非常小,因此没有包含在内。 就是说,Windows平台是我开始开发的地方,我一直对观察它的发展一直很感兴趣。 将来会有更多SQLPro产品投放Windows。 的iOS SQLPro产品最近已在iOS上发布。 作为台式机开发人员,我很难集中精力开发基于较小触摸的UI。 幸运的是,应用程序中的大多数核心逻辑在iOS和macOS之间共享。 这使我可以花更多时间专注于UI。 我相信SQLPro即将成为iOS上最好的数据库客户端之一。 结论 许多人说macOS独立开发人员无法做到这一点,iOS是前进的道路。 我还不能完全谈谈iOS市场,但是我可以说,有了合适的产品,macOS仍然可以成为成功的平台。 谢谢阅读!

CS193P-警报,通知,应用程序生命周期

行动表 例 var alert = UIAlertController( 标题:“重新部署卡西尼号”, 消息:“向卡西尼号的制导系统发出命令。”, preferredStyle:.actionSheet ) alert.addAction(UIAlertAction( 标题:“土星轨道”, 样式:UIAlertActionStyle.default) {(action:UIAlertAction)-> //进入轨道 } ) alert.addAction(UIAlertAction( 标题:“探索泰坦”, 样式:.default) {(action:UIAlertAction)-> 如果!self.loggedIn {self.login() //如果已登录,请前往titan } ) alert.addAction(UIAlertAction( 标题:“太阳特写”, 风格:。破坏性) {(action:UIAlertAction)-> 如果!loggedIn {self.login()} //如果已登录,请前往Sun销毁Cassini } ) alert.addAction(UIAlertAction( 标题:“取消”, 样式:.cancel) {(action:UIAlertAction)-> //做点什么 } ) 目前(警告,动画:正确,完成:无) 添加textField alert.addTextField(configurationHandler:{ textField.placeholder =“密码” textField.isSecureTextEntry = true } ) alert.addAction(UIAlertAction( 标题:“登录”, 样式:.default) […]

体式:2016年8月28日的团队任务和会话5.0.0(iOS / App Store)。Raw App

此应用程序可在此处用于iOS。 该应用旨在组织团队工作,跟踪工作进度,提供团队对话等。最新版本于2016年8月24日发布。 让我们在下面引用此应用程序的描述: Asana是团队跟踪其工作并获得结果的最简单方法。 从任务和项目到对话和通知,Asana使团队能够将工作从头到尾转移。 入门很简单,但功能强大到足以经营您的整个业务。 而且是免费的。 快速添加和编辑任务 从应用程序中的任何位置创建任务,待办事项,提醒和请求 将截止日期,受让人,关注者,详细信息和文件添加到您的任务中 从任何地方评论任务 从其他应用程序直接将图像共享到Asana 追踪您的所有工作 每次打开Asana时查看和组织任务列表 查看您的收藏夹以及团队和项目的完整列表 将任务组织到项目中以从头到尾跟踪您的团队的工作 向右轻扫以快速完成任务,并通知您的团队您的工作已完成 搜索所有工作,快速找到所需信息 在亚洲交流 使用对话向团队发布公告,在项目中提出问题或评论单个任务 在收件箱中仅获取有关您正在关注的项目,任务和对话的通知 直接从Inbox向队友发送带有心意或评论的快速回复 免费无限使用 免费添加任务,项目,评论,对话和附件-最多15人的团队 调查结果摘要。 我们的检查共发现27个项目,其中发现9个DAR项目和18个DIT项目。 在DAR项目中,发现1个最差项目,0个不良项目,8个良好项目和0个最佳项目。 在DIT项目中,发现0个最差项目,2个坏项目,16个好项目和0个最佳项目。 您可以在下面找到3个图表,总结了我们上面描述的内容。 每个图像都提供有关DAR和DIT项目的信息。 现在,让我们更深入地研究每个数据项的保护级别。 防护等级。 本地存储的数据(静态数据,DAR)。 本地存储的数据(静态数据,DAR)。 本地存储的数据组包括媒体信息,消息信息,地址簿“ n”联系信息,分析“ n”广告信息。 DAR的平均值为5.33分 。 项的组#1的平均值为6.00点,意味着数据以以下方式受保护-备份中不提供数据。 – 屏幕快照(“媒体信息”组) —运行某些应用程序的设备屏幕的屏幕快照(默认情况下适用于iOS设备,但适用于具有此类功能的任何第三方应用程序)。 与提到的组相关的此数据项意味着很多数据,例如照片,图像,视频,音频, – 媒体URL(“消息信息”组) —与媒体信息相关的URL,例如流媒体或配置文件的媒体等。与提到的组相关的此数据项是所有消息类型,包括 带有或不带有附件的SMS,MMS,社交和IM消息, – 消息(“消息信息”组) —不同类型的消息,对话(SMS,MMS除外,但包括 收件人和发件人ID和附件。 与提到的组有关的该数据项意味着所有类型的消息,包括。 带有或不带有附件的SMS,MMS,社交和IM消息, – […]

最近,有很多关于人们如何不像以前那样下载应用程序的新闻–…

最近,有很多新闻报道人们如何不再像过去那样下载应用程序-用户如何在大部分时间里只使用同一对应用程序。 Facebook,Instagram,Snapchat和Whatapp从房间吸收了所有氧气。 《PokémonGo》绝对是一项突破性的成功,它仍然拥有一代孩子的力量,他们都希望成为现实生活中的PokémonMasters(包括我自己的一个孩子,现在正在真正地做)。 我不同意《商业内幕》 ( The Business Insider)的看法 ,认为应用市场正在下滑,而《PokémonGo》在很大程度上是对它的完美反驳。 一直以来,下载速度最快的应用几乎都是长寿的。 但这是例外。 我想谈谈一次性应用程序。 一次性应用程序是您只需要一次然后删除手机的应用程序。 您可能会再次需要它们,因此您只需返回应用商店并再次下载即可。 您无需将其保留在手机上; 您只在需要时才想要它。 我有很多。 我想我们都做。 我最好的例子就是我们的Diners,Drive-Ins and Dives应用程序。 这是电视节目中的所有位置,都位于用户周围,并带有您附近25个位置的便捷地图。 我们的核心用户并非每天都需要该应用。 实际上,他们甚至每个月都不使用该应用程序。 他们在新的地方旅行时会使用它。 首次推出时,我们通常会从用户从东北开车到佛罗里达的过程中获取用户的电子邮件更新(实际上是奥兰多,所以我们知道这是一次迪士尼世界之旅)。 他们一直使用该应用程序,因此他们可以参观节目中显示的不同位置来用餐。 我们收到了退休人员的电子邮件,内容涉及全国各地的RV旅行,他们都在做同样的事情。 对于节目的支持者,您已经知道家乡中的所有地点。 当您出门在外时,我们的应用程序会派上用场。 我们面临的挑战是确保当我们的一位购买者返回应用商店以下载当前行程的应用时,我们仍然能露面并看上去新鲜。 更新我们的应用说明以显示我们已在上个月内更新了该应用,从而使他们知道我们仍然是Diners,Drive-Ins和Dives位置的首选应用。 有成千上万的应用程序属于此类别。 并不意味着他们没有市场。 他们只是有一个需要在需要时提醒他们存在的市场。 当前,iOS在这方面没有帮助,但是考虑到这个市场的规模可能很大,它应该是iOS(和Android)的功能。 现在,如果我已经购买/下载了一个应用程序,使用了一次并删除了它,那么当我在手机中搜索应用程序名称时,它并不总是显示为一个应用程序。 我仍然需要打开iTunes并在应用程序商店中搜索它,或者进入“更新并购买”并在那里搜索我的应用程序(请注意,为什么我的所有应用程序都按照上次下载的顺序进行排序?有任何正常的意义吗?不是按字母顺序排列吗?)在手机上以列表形式或易于使用的方式轻松管理一组“幽灵应用程序”或“未下载”应用程序不是很好吗? find-manner,以便您可以快速查找,打开和使用,然后再次删除,直到下次需要该应用为止? 一次性应用实际上可能是一个巨大的市场。 我猜想,在成千上万的应用程序中,它们有时只需要用户使用,而这些应用程序从未成为热门应用程序,但仍具有不依赖新下载的常规用法。 但是,这些工具是否仍然重要到足以使用户在需要它们时更容易找到它们? 也许将“不在手机上的应用”添加为Spotlight搜索选项? 或在iTunes类别中,可以按字母或类别排序的“所有我的应用程序”。 如前所述,您先前在iTunes中下载和删除的应用程序当前唯一的排序方式是下载顺序。 除非您下载了某些内容,将其删除并在当天需要回来的那一天才有帮助? 在对员工和朋友的小型,非常不科学的调查中,去年几乎每个人都使用一个以上的应用程序来完成此操作,其中许多应用程序使用多个应用程序。 这样对待的不仅是奇怪的小应用程序。 我们的一名员工是通过Netflix和Hulu进行此操作的,仅在她想使用它们时才下载它们,然后在使用后将其删除。 那么,Apple为什么不认识到这一点,并在需要时让您更轻松地找到按需应用程序?

修复了“无法连接到GitHub以更新CocoaPods / Specs规范回购”错误

经过这个令人讨厌的错误的努力之后,发生了: Failed to connect to GitHub to update the CocoaPods/Specs specs repo – Please check if you are offline, or that GitHub is down ,我终于可以通过以下步骤解决此问题: 使用Homebrew在Mac上升级系统的红宝石 $ brew安装红宝石 2.用新的红宝石重新安装椰子 $ sudo gem install cocoapods [-v 1.2.0] 在本例中,使用1.2.0版来防止错误处理与’!ProtoCompiler’相关的错误 3.更新有关CocoaPods主回购的信息(可能没有必要) $荚设置 然后我们都完成了🙂 参考文献: 错误提示“无法连接到GitHub”,应打印完整错误·问题#7447·… 我已阅读并了解* CONTRIBUTING准则,并已尽最大努力遵循。 报告(注:此… github.com

如何使用iOS 12 Cydia越狱

苹果公司是领先的跨国技术公司之一,该公司不断向公众发布许多具有先进功能的最新介绍。 随着iOS 12版本的iPhone XR和iPhone XS的到来,KeenLab的意大利开发人员Liang Chen发布了第一个越狱实用程序,该iOS 12 Cydia随演示一起向公众发布。 如果您也愿意以此破坏您的设备,那么只需阅读我的简单指南即可。 iOS 12 Cydia的特殊功能 最新的越狱iOS 12具有惊人的功能和修改,例如,这是所有先前版本中最好的Cydia 版本 。 这使用户认为越狱是从设备轻松安全地获取管理员访问权限的最佳实践。 1)。 无需Windows计算机可以在同一设备上处理安装 2)。 与iPhone,iPad和iPod touch版本具有广泛的设备兼容性。 3)。 超快速越狱程序 4)。 随时可以获得完整的客户帮助 5)。 极端支持所有iOS版本。 提供对所有iOS版本的支持。 如何下载适用于iOS 12的Cydia? 您可以从官方网站免费下载iOS 12 Cydia,然后轻松开始刷新手机。 从目标设备从您的野生动物园浏览器导航到官方站点。 现在,请按照以下给定的步骤越狱iOS最新的iPhone,iPad和iPod touch。 越狱iOS 12的执行方法 注意:在进入越狱过程之前,请仔细阅读整个指南。 如果您丢失了设备中的所有重要数据,请为手机充满电并制定备用计划。 步骤1 :从Safari浏览器导航到官方主机 第2步 :现在使用选项卡安装来扫描设备兼容性 第3步 :如果您的设备与系统兼容,越狱过程将立即开始 步骤4 :现在,安装标签并添加标签到主屏幕按钮 步骤5 :完成后关闭浏览器 步骤6 :现在您可以在iOS 12手机上看到Cydia 定论 […]

针对开发人员/高级开发人员的iOS面试问题

在本文中,我将介绍与iOS面试有关的大多数问题和答案。 它一定会在某种程度上帮助您。 开始吧。 Q1。 swift和目标C有什么区别? 什么是手动保留周期? 内存管理如何快速工作? 如何检查协议的可选方法在继承的类中实现? 什么是面向协议的编程? MVVM与MVC? 如何快速实施收款? NSArray vs Array? 您将如何在用户默认值中存储自定义对象? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-5cc89eb67160 Q2。 为什么@ property / @ synthesize不存在? 如何实现可选功能? 为什么网点薄弱? 您将如何修改init函数中的let变量? 什么是隐式展开可选项? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-part-2-9aa313dd04f2 Q3。 如何快速创建抽象类? https://medium.com/ios-expert-series-or-interview-series/how-to-create-an-abstract-class-in-swift-f8ebdc30e26 Q4。 黑白Delegate和DataSource有什么区别? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-part-3-4868552831f4 Q5。 快速编写通用单例类? 什么是仅类协议? 快速的静态函数与类函数? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-august-2018-part-4-b5bb73d9b3d6 Q6。 DIspatchQueue中有哪些不同类型的队列? 什么是坚实原则? 什么是依赖注入? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-sept-2018-383dc3bbda67 Q7。 什么是适配器,责任链,装饰者,委托,外观设计模式? https://medium.com/ios-expert-series-or-interview-series/design-patterns-on-ios-7523230f3d31 Q8。 黑白手动和自动参考计数不同? 什么是并发,有多少种实现方法? https://medium.com/ios-expert-series-or-interview-series/top-ios-interview-questions-and-answers-oct-2018-c98e8821ff6c Q9。 MVC vs MVP vs […]

Cordova-plugin-cocoapods-support的Cordova编译问题修补程序

cordova-plugin-cocoapods-support是一个Cordova / PhoneGap插件,它允许您在XML文件中为iOS定义插件或项目CocoaPods依赖项。 但是,当与cordova-ios@4.5.2或更高版本一起使用时,Cordova编译命令将失败。 本文将指出导致此问题的更改以及使iOS构建再次通过的潜在解决方案。 当Cordova发布cordova-ios@4.5.2时,引入了新变量location ,其中包含了必要的信息,以供平台构建器获取捆绑包标识符。 新变量的属性之一是pbxproj文件的路径。 该文件位于xcodeproj目录中。 在Cordova准备项目之后,将执行cordova-plugin-cocoapods-support插件的after_prepare挂钩脚本,并对平台构建脚本进行修改。 执行的修改之一是非常松散的查找,并将xcodeproj所有实例替换为xcworkspace 。 由于意外更改,生成器在尝试从xcworkspace目录解析pbxproj文件时失败,因为找不到文件。 该问题只能通过cordova compile命令看到,而不能通过cordova build命令看到。 这是因为build命令执行所有构建步骤,并从缓存中维护包标识符信息,并且不需要解析pbxproj文件。 此解决方案无需多说。 如果您是插件开发人员,并且有可能,那么删除插件依赖项并将Cordova的本机实现用于CocoaPods支持将是理想的选择。 这是有关如何使用Cordova的实现加载OpenSSL Pod文件的示例。 <framework src=" OpenSSL ” type=” podspec ” spec=” 1.0.210 ” /> 您可以在此处找到更多详细信息。 如果您不是插件开发人员,并且不能删除插件依赖项,则可以创建自己的挂钩脚本来还原重大更改。 首先,我们将需要创建钩子脚本,最后将其添加到项目的config.xml中,以便使用它。 创建脚本 让我们创建一个名为beforeCompileCocoapodsHotfix.js的新文件,并将其添加到hooks文件夹中。 路径应类似于以下/hooks/beforeCompileCocoapodsHotfix.js 。 接下来,我们将添加脚本内容。 该脚本将仅显式搜索重大更改并还原。 这不会还原插件的所有更改。 最后,我们将向项目的config.xml添加对新钩子脚本的引用,以在编译前执行。 由于这是一个iOS依赖项,因此我们将其添加到iOS平台声明中。 <platform name =“ ios ”> <hook type =“ before_compile ” src […]