Tag: 移动应用开发

快速浏览类型擦除

如果您正在编写Swift,那么您可能已经听说过类型擦除。 也许您甚至在使用它。 但是,即使您属于这两个阵营中的一个,也有可能实际上不知道为什么类型擦除有效。 ♂️ 与其给您提供有关如何擦除类型的方法,不如让我们实际研究问题所在并逐步解决。 问题 假设我们正在制作一个通用网络会话类,该类必须支持各种JSON反序列化器,这些反序列化器返回的对象与网络会话的关联类型匹配。 像这样: 这很烦人,但确实有道理。 我们的协议JsonDeserializer是抽象类型,因此Swift编译器无法推断其引用的具体类型,也不能假设其在编译时由其associatedtype提供的类型。 Hector Matos在他的博客KrakenDev : 简短的答案是:Swift希望是类型安全的。 再加上它是一种提前编译的语言,并且您有一种需要NEEDS能够在编译期间随时推断具体类型的语言。 我不能太强调。 在编译时,不是函数/类约束的每个类型都需要具体。 协议中的关联类型是抽象的。 这意味着它们不是具体的。 他们是假的。 没有人喜欢假货。 因此,尽管此错误令人不快,但确实有道理-并且该错误告诉我们一些重要的信息。 指出,该协议只能用作通用约束 ,即在尖括号之间。 尝试1 我们知道,将JsonDeserializer用作类型约束的唯一方法是在使用它,但是出于参数的考虑,我们决定使用协议约束来指定一种类型,就像我们对泛型类的处理方式一样。 结果如何? Cannot specialize non-generic type ‘JsonDeserializer’ ❌ 虽然这是预期的。 正如我们前面所讨论的,该协议是一种抽象类型,尽管它可能具有通用要求,但它本身并不是通用类型。 不是class SomeType { … }方式。 尝试2 好吧,让我们尝试使用JsonDeserializer作为一般约束,并将反序列化器放入一个代理对象,我们将其称为DeserializerBox (此处使用Box是为了与以后的类型擦除命名约定保持一致)。 这个错误告诉我们我们需要提供一种类型来满足DeserializerBox的通用类型要求。 不幸的是,这意味着要指定一个JsonDeserializer 。 但是,我们想使用任何为我们提供Payload类型对象的JsonDeserializer ,因此指定特定的反序列化器具体类型将无法达到目的。 这与仅将具体类型用作Session的deserializer属性的类型约束没有什么不同。 令人沮丧的是,这是进步。 尝试3和3.5ish 为了弥补我们缺乏必要的类型争论,我们还需要DeserializerBox成为JsonDeserializer的真正代理对象,这意味着它应与JsonDeserializer 。 这意味着我们应该能够将代理与JsonDeserializer一样对待,并且它应该公开相同的接口。 为此,我们必须坚持使用JsonDeserializer […]

地理栅栏:如何使用Swift在现实世界中实现虚拟边界?

什么是地理围栏? 地理围栏是一种定义现实世界地理区域周围的虚拟边界的技术。 每次用户进入或退出某个地理围栏的边界时,都可以在支持位置的设备(通常是智能手机)中触发动作。 通常,用户将根据其位置实时接收包含某些信息的通知。 这项技术的主要优势在于,它将虚拟世界与真实世界融合在一起。 在横向视图中,我们在多个项目中利用了地理围栏,特别是在卫生行业。 地理围栏在移动开发中的应用 地理围栏可以有多种应用程序: 市场营销 :服装店附近时,服装店可以通过当天的优惠和折扣触发推送通知。 提醒 :此应用程序可以提醒足球俱乐部的球迷在周围时进入体育场的大门的地址。 到达和离开特定位置:航空公司可以发送通知,希望用户在飞机起飞后安全旅行,或者在飞机降落时发送欢迎消息。 儿童追踪 :应用程式可以传送通知,告知父母其子女已离开或进入特定区域。 安全性:进入或离开区域时,该应用可以启用或禁用功能。 但是,地理围栏并不是要随身携带推送通知轰炸用户。 重要的是要向用户提供相关信息,以便在正确的时刻考虑到用户的需求,从而做出更好的决策。地理围栏的目的是增加价值并为客户提供更好的体验。 相应地使用它,将为客户和企业创造双赢局面。 因此,了解这种技术的强大功能的重要性。 优点 通过提供实时报价,折扣和促销来吸引客户。 增强用户体验。 向用户发送位置特定的通知。 缺点 地理围栏需要用户的批准。 如果用户拒绝或禁用位置服务,则必须在应用设置中启用地理围栏,然后才能使用。 位置跟踪会消耗过多的电池电量,这是用户关闭设备中的位置服务的首要原因。 仅适用于大范围区域。 知名应用中的地理围栏 您是否曾经问过自己,当您在已经访问过并签到过的地方附近时,Foursquare会如何向您发送提醒? 或《 Pokemon-Go》如何在关键区域禁用狩猎小精灵? 答案是地理围栏:在现实世界中创建边界,同时通过移动设备跟踪您的位置。

构建像Uber这样的出租车预订应用程序

首先,由于其出色的服务,Uber是数百万人使用的出租车预订应用程序。 点击电话即可预订私人司机。 最近的汽车将在几分钟之内接您。 一定要考虑使像Uber这样的出租车预订应用程序吗? 可能会出现问题,费用是多少? 请记住,没有人能估计开发像Uber这样的出租车应用程序的确切成本。 这一切都取决于各种各样的事情:应用程序体系结构和开发速度,功能,国家和行业以及数百种其他情况。 后端编程语言:对于android,我们使用Kotlin / Java;对于iOS,我们使用Swift编程语言。 除此之外,我们使用Laravel,Node.js,Socket和Google Firebase。 一些特定于平台的工具适用于Android的Google Map API和适用于iOS的MapKit / CoreLocation。 对于支付网关,我们使用PayPal Mobile SDK。 成本估算完全取决于我们的开发过程。 后端开发 Web开发 本机应用程序开发(适用于Android / iOS) 应用程式设计 质量保证 好吧,您可以从我们这里聘请专门的应用程序开发人员来定制您的应用程序开发解决方案。 与我们明确讨论您的项目,我们将满足您的业务需求。 期待您的回音。 技术指数 春谷路5001号 东400套房 达拉斯 TX 75244 (321)806–2936 (星期一-星期五,上午8:30-下午5:30 EST)

第3部分:安装自定义日志管理器

欢迎使用第3部分:安装自定义日志管理器 如果需要检查第2部分,请继续 。 首先,什么是SwiftyBeaver? SwiftyBeaver是基于Swift的iOS和macOS日志记录框架。 SwiftyBeaver具有不同类型的日志消息,我们还可以过滤日志以使错误检查更加轻松。 它有一个免费的许可计划。 那不是全部。 出站日志信息保存在云中。 SwiftyBeaver带有一个macOS应用程序,可让我们实时查看日志。 SwiftyBeaver日志记录框架可以使用您选择的安装工具安装在每台Apple设备以及Swift 2和Swift 3上 。 对于Swift 3,请安装最新的SwiftyBeaver版本 对于Swift 2,安装SwiftyBeaver 0.7 在第3部分中,我们将为项目配置SwiftyBeaver。 云设置 完成注册SwiftyBeaver首选项菜单后,您将需要生成新的凭据。 File> New SwiftyBeaver保存本地日志文件。 但是我没有必要的信息。 保存的位置并不重要,但是请不要忘记此位置。 单击“ 生成新的应用程序凭据”按钮时,您应该看到我们应用程序的应用程序ID , 应用程序秘密和加密密钥 。 让我们使用AppDelegate定义这些信息。 安装SwiftyBeaver Logging Framework之后,只需在AppDelegate.swift的顶部添加以下3行: 导入SwiftyBeaver 让日志= SwiftyBeaver.self AppDelegate:didFinishLaunchingWithOptions()添加您要在整个应用程序中使用的SwiftyBeaver日志目标(控制台,文件等): //添加日志目标。 至少需要一个! let console = ConsoleDestination()//登录到Xcode控制台 let file = FileDestination()//登录到默认的swiftybeaver.log文件 log.addDestination(控制台) log.addDestination(文件) 要开始记录到平台,您只需要使用您的凭据启动SBPlatformDestination() ,可以选择调整属性,然后将该实例添加到SwiftyBeaver本身。 让平台= […]

成功的iOS应用中常见的5种功能

苹果的App Store是仅次于Google Play商店的第二大移动应用市场。 目前,iOS设备用户可使用220万个应用程序,无论您是销售产品还是服务,商业应用程序市场都在蓬勃发展。 与任何技术产品一样,为了脱颖而出并产生持久影响,新泽西州的任何iOS应用开发公司都经常与企业主紧密合作以整合某些功能。 我们来看一下Apple App Store上成功的移动应用背后的哪些共同因素。 独特身份 当今的移动设备可以达到与其他移动设备相同的目的(例如,在线销售T恤),但之所以会比其他移动设备更受青睐是因为该应用程序为其用户提供了独特的功能。 这可以提供自定义功能,个性化体验,或者简单来说,可以提供更好的用户体验。 促成独特性的一些因素是针对目标受众,应用程序平台和硬件性能的方法。 锐利的设计 在考虑iOS移动应用程序时,您根本无法忽略设计元素。 如今,大多数iPhone和iPad具有出色的分辨率和清晰的显示屏,可增强用户体验。 在这样的目标市场中,设计薄弱,外观不美观的缺陷是一个很大的缺点! 设计很重要,因为它可以给用户留下第一印象,并且通常是导致用户保持对应用程序忠诚度的决定因素。 安全开发 众所周知,与Play商店不同,App Store是一个封闭的市场。 这对于企业主来说意味着什么,只有完全安全且具有最佳开发能力的应用程序才能被接受。 适当的优化,数据安全性,用户权限是确定应用程序开发良好程度时要考虑的一些关键因素。 综合分析 作为想要启动iOS应用程序的企业主,应该意识到可以帮助企业发展和使应用程序在市场上推出后变得更好的功能。 后端分析就是其中一项功能,可以帮助进行商业智能和决策。 当用户与该应用进行交互时,一旦生成模式,它便可以揭示很多内容,因此,分析成为任何成功的移动应用的关键基础。 不断改进 该应用程序在iOS市场上发布后,仍然需要在后端不断进行很多工作。 例如:如果企业主雇用了iOS应用程序开发公司来进行开发工作,则双方都知道,即​​使应用程序上线后,维护,重大修复,新的安全措施等也可能会不时出现!

Xcode 8.2 Simulator中的新功能

在Xcode 8.2的发行说明中,Apple为其新版本的Xcode引入了功能。 在此博客中,我将解释如何使用这些新功能。 这是Xcode 8.2 Simulator的两个新功能: 您可以使用xcrun Xcode命令行实用工具xcrun Simulator的视频和屏幕截图。 📷要截屏,请运行命令xcrun simctl io booted screenshot 。 📹要拍摄视频,请运行命令xcrun simctl io booted recordVideo . (9887264) 将应用程序拖到“模拟器”窗口中即可安装该应用程序。 (23387069) 捕获 第一个功能是录制视频并拍摄屏幕截图,非常简单。 您可以启动模拟器,在其上运行您的应用,然后可以截屏或开始/停止视频。 此功能非常方便从您的应用程序发送演示视频。 尽管该命令很长,但是却很容易执行! 拖放 第二个功能是将应用程序拖动到“模拟器”窗口中,但并不是那么简单。 至少不适合我😉 我的想法是,当我拥有.ipa格式的应用程序时,只需将其拖到将安装该应用程序的Simulator窗口中即可。 太糟糕了,事实并非如此。 但是苹果的意思是什么? “ 将应用程序拖到模拟器上” ? 因此,我在大型互联网上进行了搜索,并在Twitter上做了一些研究,在那里我收到了Brandon的这条推文。 提出的问题是; 为什么.app在模拟器中可以工作而.ipa不能工作? 这是因为.ipa格式的iOS应用是针对不同于模拟器可在其上运行的架构(ARM)构建的(x86)。 因此,.ipa格式的iOS应用只能安装在物理设备上,而不能在模拟器上运行! 附加:从DerivedData获取应用程序包 现在我们知道了如何将应用程序捆绑包拖放到Simulator上,我也想提供有关该应用程序捆绑包的一些详细信息。 该应用程序包位于DerivedData文件夹中,并在为设备构建项目时进行编译。 此DerivedData文件夹包含所有中间构建信息,调试和发布构建目标以及项目的索引。 模拟器应用程序捆绑包的特定位置可以在这里找到: 〜/库/开发人员/ Xcode / DerivedData / / Build […]

构建旅行照片共享iOS应用

你好! 我想向您展示如何构建相对简单的照片共享应用程序:将您的图像放置在当前位置的地图背景上。 您还可以添加一条短消息和您的姓名,以得到如下所示的图像(这样,您就可以将自己在很棒的假期中所拜访的东西吹嘘给朋友): 要遵循本教程,您需要一台装有xCode的Apple计算机和一个Apple开发者帐户。 创建项目 打开xCode并创建一个名为PicTravel的新项目。 选择“ 单一视图应用程序”模板: 给项目起一个名字,我们选择了PicTravel但是您可以选择其他喜欢的名字。 还要填写项目的组织名称和组织标识符: 最后一步是将新创建的项目保存在Developer文件夹中。 建立介面 在左侧面板中,打开Main.storyboard 。 这是我们构建应用程序界面的地方。 从右侧面板的底部拖动ImageView并将其放置在场景的中心。 调整其大小,使其覆盖所有内容(将其捕捉为出现的蓝线)。 如下图所示,使用约束对话框将ImageView固定到场景边距: 我们将使用它为应用程序的主屏幕放置背景图像。 从此处下载背景图像,然后从左侧面板中打开Assets.xcassets项,单击底部的“ +”按钮,然后添加一个名为Background的新图像集。 将下载的图像拖到“ 1x”占位符上,以得到这样的结果(在本教程中,我们将不使用“ 2x”和“ 3x”占位符,但是如果需要,可以为其添加更大分辨率的图像)。 现在,回到Main.storyboard ,选择ImageView ,然后从Attributes Inspector中选择Background图像,然后将Content Mode设置为Aspect Fill 。 现在是时候将新图像添加到我们的资产中,用于将要添加的“拍照”按钮了。 从此处下载图像,在Assets.xcassets中创建一个名为Button的新图像集,然后将图像拖动到1x占位符中,就像我们之前在背景中所做的那样。 接下来,在Main.storybord ,将一个按钮拖动到场景的中心。 将“ 类型”设置为“ Custom ,清除“ 标题” ,并将“ 背景”设置为我们刚刚创建的“ Button图像。 从“ 大小”检查器中 ,将的按钮设置为,并将高度设置为115 。 为按钮的with和height添加两个新约束(每个115),然后从Alignment Constriants中将按钮在容器中水平和垂直对齐。 现在,我们为用户的名称和消息添加两个文本字段。 如下图所示,将它们放置在下面的约束中。 不要忘记蓝色的指南,这些指南使您更容易放置。 要在两个元素之间创建约束,可以按住Ctrl键并拖动到另一个,然后从出现的弹出窗口中选择所需的约束类型。 对于消息文本字段: […]

自定义React Native图标? 是的

2.编辑Info.plist并添加一个名为Fonts的属性,该属性由应用程序提供(如果Xcode无法自动完成/不使用Xcode,则为UIAppFonts),然后键入刚刚添加的文件。 它看起来像这样: 步骤1 在Sketch或Illustrator中创建图标,并将它们另存为svg。 第2步 转到http://fontello.com/并上传您的自定义字体。 您也可以从它们的选择中进行添加,以使它们都保持相同的字体。 第三步 从Fontello下载字体文件并打开它。 复制文件夹(其中的所有内容)并转到您的本地项目。 进入保存资产的目录,并创建一个名为fonts的文件夹,然后将该文件夹粘贴到其中。 我建议将文件重命名为“ fontello”。 接下来,打开Xcode并执行与“基本安装过程”中所述相同的插入过程,但使用新的字体文件。 完成此操作后,返回到项目所在的文本编辑器。 步骤4 创建一个名为“ icon.js”的文件。 创建文件后,添加以下代码。 第5步 然后,在需要图标的组件中,您将可以执行以下操作: 希望这对像我一样挣扎的人有所帮助。 干杯!

如何计算社交网络应用开发预算?

计算社交媒体项目预算的问题对于项目开发至关重要。 毕竟,您将需要知道要分配多少钱。 确实,您需要考虑创建社交媒体应用(例如Instagram)所需的大概价格。 参照Clutch的图表调查来自即将到来的领先移动应用程序开发公司的12家公司的代表,以计算出构建iPhone的成本,更重要的是,与此成本相关的关键变量。 正如我们在这里看到的那样,大多数社交媒体开发成本与开发应用程序基础结构,功能,界面和设计以及测试以及应用程序开发的高端和低端成本(38,000美元至171,000美元)有关。 开发社交媒体应用程序通常意味着由后端,数据库和移动客户端组成的三层架构,这对于在开发移动应用程序时进行思考非常重要。 您还必须考虑应用程序的各种目标(即,您是在吸引新客户,娱乐现有客户,收集数据,获利还是提高品牌知名度)。 这些功能决定了社交媒体的开发成本,因为它们揭示了您以后将要开发的特定功能服务,当然还有您要雇用的专家团队。 在将成本和工时分解成预算计算之前,请认真考虑采用5W方法(谁,什么,什么地方,什么时候以及为什么)来确定您的应用正在试图实现的目标。 用户真正想要的是什么? 了解您的用户将帮助您确定他们的需求,因此您可以根据这些需求和功能更好地确定开发准确的社交网络应用程序的成本。 特征和功能的成本 要计算准确的估算值,您需要清楚社交媒体应用程序的两个功能: 功能和功能 。 从一开始就考虑到这些功能通常价格较高: 第三方API集成。 计费集成。 数据库加密。 具有强大分析功能和众多功能的高级管理面板。 用户之间的自定义交互机制(社交网络的确切情况)。 您的关键社交媒体应用程序通常具有以下功能: 帐户授权(通过电子邮件,Facebook或电话号码进行) 设置授权是移动社交媒体应用程序开发的重要组成部分。 您可以通过以下两种方法之一授权用户:通过注册新帐户(包括登录名,密码,电子邮件和电话号码)或通过现有的社交媒体帐户登录。 设置授权可能需要160个小时来进行后端和移动iOS开发,需要40个小时来通过电子邮件进行注册/授权,需要40个小时来开发登录/注销功能,需要40个小时来设置社交媒体登录和签名,以及大约30小时通过电话号码进行授权。 创建/编辑配置文件 您的社交媒体应用程序应允许用户通过更改个人数据来修改其个人资料,这些数据包括有关他们的联系方式,姓名,性别,电话号码,网站等的信息。 这大约需要80个小时,iOS移动开发大约需要60个小时,后端开发大约需要20个小时。 信息交流 您的用户应该能够通过您的应用进行实时交流。 这最多需要1200个小时:iOS移动开发需要700个小时,后端开发需要500个小时。 调整设定 您的应用程序应具有各种可调整的功能,使您的社交媒体应用程序更易于使用。 这包括设置界面的适当语言,启用或禁用推送通知的能力,将用户帐户设置为私人帐户等。开发和设置这些可调整功能所花费的时间可能在96到126小时之间。 推送通知大约需要64小时,iOS开发大约需要24小时,后端最多需要40小时。 “其他设置取决于它们的数量和复杂性32–64小时(iOS开发24–40;后端8–24)”。 使用数字滤镜和其他功能上传和自定义照片 此功能将允许您的用户通过文件管理器的应用,旋转,锐化,拉直图像等功能以不同方式更改和修改照片。此功能在iOS开发中最多需要320个小时,包括应用滤镜(120小时),创建自定义滤镜(120小时)以及裁剪和旋转照片(80小时)。 用户将进一步拍照,上传视频,发表评论并在照片中添加其他标签。 实施这些功能大约需要160-340个小时,其中40个小时用于开发上传照片的必要技术,另外80-300个小时用于任何其他选项(标记,评论,活动提要等)。 关联不同的社交媒体帐户 用户应该能够通过在所有社交媒体平台上共享照片和视频来进行交互。 开发用于链接不同社交媒体帐户的技术,iOS和后端开发最多需要80个小时。 地理位置特征 用户可以共享视频或照片的拍摄位置。 优质准确的地理位置技术最多需要120个小时,iOS移动应用程序开发需要80个小时,后端开发需要40个小时。 最后,搜索不同参数的功能 这是用户可以在您的应用程序中搜索某些内容的能力,并且需要120个小时才能进行开发(iOS开发需要80个小时,后端开发最多需要40个小时)。 地理位置进一步决定了您的应用定价和设计成本,因为不同国家/地区的开发团队的可变费率不同。 您的团队将由两名中/高级iOS / Android开发人员,一名高级UX / UI设计人员,一个使您的移动应用程序开发项目保持正确轨道的项目经理,一个问答忍者以及前端和后端组成开发人员。 […]

Xcode中的花哨字面量

文字 今天,我将向您介绍Swift中可用的一些奇特的文字。 它们可以帮助您简化Swift程序员的生活。 首先,让我们解释一下“文字”一词​​实际上代表什么。 根据维基百科 : 在计算机科学中,文字是用于表示源代码中的固定值的符号。 这意味着在Swift中,以下论点是正确的: 让someNumber = 1 // 1是文字 let someString =“生日快乐” //“生日快乐”是一个文字 让optionalBool:布尔? = nil // nil是文字 通常,文字是程序员直接键入的值。 多年来,我们在其他编程语言中都有这种文字,因此,在Swift中这并不是什么前沿技术。 但是,并非所有人都知道Xcode还提供了颜色和图像的文字。 颜色文字 考虑一下您在代码中编写了多少次这样的代码: 让someShadeOfGreen = UIColor(红色:25/255,绿色:210/255,蓝色:95/255,alpha:1.0) 好的,也许您比我聪明一些,并且您已经为UIColor编写了自己的初始化程序,所以您不必每次想创建UIColor对象时都用255和alpha编写此奇怪的除法。 无论如何,它仍然不能使您对这种颜色有任何了解。 我为这个变量命名,所以我可以假设稍后再回到这部分代码后,它有些绿色。 但是,您知道,“ 灰色的五十道阴影 ”中的五十个字是有原因的。 有很多。 值得一提的是,Color Literals派上了用场,它使我们可以将值分配给UIColor变量并预览结果。 您只需开始在编辑器中键入colorliteral即可使用Color Literals 。 然后,将显示预览。 双击可以从调色板中选择所需的任何颜色,也可以只键入适当的RGB值: 我认为这是在代码中创建UIColor对象的不错选择。 图片文字 Xcode中另一个可用的奇特文字是Image Literals。 它们的工作方式与Color Literals类似。 让我们讨论一种创建UIImage对象的经典方法, 该对象包含资产中的一些图像: 让pepeImage = UIImage(命名为:“ […]