Tag: Apps

窥视轨道

见更多您的朋友和家人 错过与朋友和家人见面的机会时有发生-不管您是彼此相距不远,还是访问相同的城市,或者俩人都参加相同的活动。 我们的朋友经常在我们身边,但是如果没有一些预先计划,很难找到他们并与他们见面。 Orbit以一种快速而无摩擦的方式回答“您在哪里?”和“您有空吗?”的问题 ,使您可以控制自己的隐私。 对于每个朋友,您可以选择共享您所在的地区或只是您所在的城市。如果您想与彼此或与一群朋友暂时共享自己的精确位置,则可以轻松地安排轻按几下“会议”。 只要您有时间进行社交活动,只要将自己设置为“有空”,附近的朋友就会收到有关您的位置和心情的通知。 ☕️ 会议结束后有空吗? 跟上附近的朋友喝杯咖啡。 🛬 刚降落? 轻松让您的朋友知道您在城里。 work 刚完成工作? 看看周围有谁,有空喝一杯。 发现您周围有趣的人 除了我们的朋友和家人以外,我们周围还有一些我们不认识的人,还有扩大我们的社会和专业圈子的机会。 变得“可发现”,以利用您所在地区和您所访问的地方的人的超本地网络。 Orbit会向您显示其他可发现用户的个人资料,匹配双方共同的兴趣,并通过快速消息打破僵局。 🎟 在会议或活动上? 签到,看看还有谁在参加。 👋🏻 想结识新朋友吗? 看看谁在附近有相似的兴趣。 🏡 刚搬回家? 在您的新家乡发现并结识新朋友。 与周围的人联系 有兴趣带动Orbit旋转吗? 我们将很快在iOS上启动,稍后我们将计划推出Android应用。 如果您想成为第一个知道我们何时进入App Store的人,请直接访问我们的网站并注册! 更新:该应用程序现已在App Store上发布!

垂直分页无限制

大多数移动应用程序用户将滚动视为理所当然。 当他们不顾一切地使用指尖在Facebook,Instagram,Twitter,LinkedIn,Google报亭或许多其他应用程序上的新闻源中无休止地滚动时,他们不会停止思考精心构建的代码,以支持看似轻松的滚动。 实际上,创建无缝滚动动作需要进行大量工作,以提供定制的,简化的 用户体验 。 在Distillery,我们面临着一个艰巨的挑战,因此当我们意识到没有现成的解决方案可以支持 我们正在构建 的iOS Soapbox 应用 所需的滚动体验时,我们就准备好并愿意 。 这篇博客重述了我们如何应对挑战。 该文章由Distillery的开发商之一Nikolay Sohryakov撰写,于2016年12月首次发表在Distillery的博客上。 是否想了解我们更多的经验,为我们为初创企业和企业客户开发的应用和网站开发定制的高质量UX解决方案? 请查看我们的 特色应用程序开发工作 或有关 使用PubNub建立传达情感的交谈聊天, 为Roommates建立Circle , 使用SignalR加快客户端/服务器通信 , 为nēdl应用程序实现Alexa以及在应用程序中 使用Kotlin 的博客- 建设过程 。 适用于iOS的Soapbox应用程序提供了一种有趣,简单的方式来捕捉时刻,与世界分享时刻并帮助宣传事物和原因。 Soapbox也强调了通过社交渠道获利的能力。 您可以跟随您的朋友,发现来自世界各地的杰出创作者,他们分享您喜爱的惊人内容。 但是,在开发应用程序时,Distillery遇到了许多技术挑战,我们需要克服这些挑战才能使应用程序按预期的方式工作。 在本文中,我们将特别讨论一个挑战。 Soapbox是围绕新闻源构建的以内容为中心的应用程序。 但是,传统新闻提要实现的某些功能与我们希望用户拥有的体验不太吻合: 在Facebook之类的应用中实现的新闻源可提供连续的滚动体验,但是我们希望用户能够向上或向下滑动以直接捕捉到源中的下一个(或上一个)帖子。 我们希望一次只在屏幕上显示一个新闻提要帖子,即使该帖子未填充整个屏幕。 我们还希望帖子长度不限,因此帖子实际上可能会延伸到单个屏幕之外(并且您可以向下滚动以通过拖动查看更多内容)。 我们希望用户能够在帖子之间滑动,以便像卡片一样在帖子之间移动。 那么,问题是如何实现这些用户体验目标。 解决这些问题的第一个想法是使用UITableView并将isPagingEnabled设置为true 。 但这被证明不是可行的选择,因为UITableView要求页面大小相同。 我们在网上冲浪以寻找现成的解决方案,却一无所获-因此,我们决定构建自己的控件,该控件可以完全自定义并满足我们的所有需求。 该控件我们称为CardScrollView 。 因为我们希望Soapbox具有滚动内容提要,所以我们决定使用UIScrollView作为新控件的基础。 UIScrollView实际上实现了基础的滚动逻辑,并公开了控制滚动过程所需的所有API。 但是UIScrollView内部的内容呢? UITableView吸引人的一件事是它自己管理内存并在重用单元格方面做得很好。 那么我们如何为CardScrollView做到这一点呢? 我们回想起在2010年Apple全球开发者大会上进行的对话。 在那里,苹果工程师讨论了使用滚动视图设计应用程序。 本演讲的一个非常重要的部分介绍了如何通过对象池模式的实现重用 […]

Swift基础知识:制作简单的iOS应用程序所需的条件

随着手机数量的增加,对应用程序开发人员的需求逐年增加。 Swift是创建应用程序最常用的语言之一。 “ Swift是针对macOS,iOS,watchOS和tvOS的强大而直观的编程语言。 编写Swift代码是交互式且有趣的,语法简洁而又富有表现力,并且Swift包含开发人员喜欢的现代功能。 Swift代码在设计上是安全的,但也可以生成运行速度极快的软件” 现在一切都应该运行,您应该可以使用该应用了。 万一遇到任何错误,请在Stack Overflow上查找它们。 到应用的代码: 将立即更新 谢谢,希望您喜欢。

打个招呼App Store

对我们来说,这也许是最重要的一周。 Best By正式在应用商店中! 但是,工作远未完成。 现在我们有了一个人们可以实际下载的应用程序,我们必须尽可能地完善该应用程序。 我们于4月1日星期日提交了应用商店。 那天晚上晚些时候,发现了一个错误,因此我们不得不重新提交,所以我们实际上提交了两次。 在星期一,我们必须看到其他团队正在创建的应用程序。 看到我们班上的每个人在他们的应用程序上的表现都很棒,这真是令人惊讶,并且成为其中的一员也令人兴奋。 我们收到了有关应用程序的反馈,称导航该应用程序有些复杂,因此我们决定需要研究应用程序的流程。 最好的方法是向人们展示该应用程序,并让他们在应用程序内执行某些任务,以了解完成所需步骤有多么快速和容易。 我们同意可用性方面存在问题,因此我们开始集思广益,思考改变按钮,页面和标签的方法。 这些按钮应该很明显,并且一眼就能暗示其功能。 在星期一,我们的计算机科学成员按照入职顺序进行工作,我们讨论了如何使用简单的图标正确显示按钮的功能。 同时,我们能够在Testflight上测试该应用程序,从而允许团队以外的人使用该应用程序并提供有价值的反馈。 当天下午晚些时候,我们的应用被批准用于应用商店。 在星期二,发现了一个破坏应用程序的错误,因此我们必须提交更新。 不利的一面是人们不得不手动对其进行更新。 在星期三,我们必须进行演示,并炫耀我们的应用程序以及上次冲刺期间的工作。 我们认为演示文稿进行得很好,并收到了大量积极的反馈。 很高兴听到教授和同行对您的应用程序的看法。 我们还必须参加一个有趣的小活动,班上的每个人都必须为另一个团队的应用程序做些简短的介绍。 有趣的是,看到有人能以多快的速度提出聪明的建议。 推销我们应用程序的人非常成功,因此我们至少知道每个人都了解我们应用程序的目标。 演讲之后,又回到了研讨。 我们在课堂上花了时间讨论应用程序的某些方面。 关于采取什么步骤使Best By变得更加用户友好的讨论很多。 该讨论在我们的Slack频道中进行了一整夜。 我们越来越接近使这个程序完美。 对于应用商店,我们需要提交图片以显示我们的应用页面示例,以便潜在用户可以在下载应用之前了解该应用的外观。 Jahnavi能够呈现一些非常好的图像。 对于每个页面,都有一个简短的说明,告诉您该页面是什么以及如何利用某些功能。 现在是时候让我们从应用商店中获取用户反馈,并让我们的应用与用户群一起成长。 除编码外,我们还将专注于使用社交媒体作为主要平台的营销。 查看我们的Twitter @bestbyapp和我们的Facebook页面https://www.facebook.com/bestbyapp/。

📸迅捷相机-第1部分

iOS 11带来了许多新的酷功能,例如机器学习和增强现实。 因此,您可能需要测试这些功能或创建出色的应用程序。 但是,如果您注意到其中一些需要自定义相机并访问相机框架。 iOS有很多API,供我们访问设备相机,捕获图像并对其进行处理。 AVFoundation是您应该关注的框架。 由于此框架非常庞大,并且有很多方法可以实现所需的功能,因此我决定撰写有关以下内容的博客文章集。 创建自定义相机视图 从自定义相机拍照 使用录制视频 检测面部并扫描QR码 (如果您需要一些特定的东西,请在评论中问我。我将尝试写/学习此内容) 对于所有想跳过博客文章并查看实际代码的书呆子。 我被你盖住了。 这是Github回购。 请密切注意此仓库,因为我将在同一应用程序中添加所有功能,并且如果您想提高代码质量,欢迎PR /问题。 rizwankce /相机 sw swift github.com中的iDevices自定义相机

Emus4u下载的iOS

曾经有一段时间,越狱iOS设备是一件容易的事。 但是自从iOS 10发布以来,情况发生了变化。 在iOS 11发行版中,越狱也未显示任何改进。 Yalu越狱之类的东西很少。 Yalu的实用程序也仅限于少数设备,因为它需要运行特定版本的iOS。 因此,这导致越狱后现在可以使用Cydia访问修改的应用程序和进行调整的用户数量减少。 每个问题都伴随有一个解决方案,因此,这个问题导致了许多应用程序安装程序的开发,通过这些安装程序,无需任何越狱即可安装经过调整和修改的应用程序。 这样的应用程序安装程序之一是Emus4u (https://emus-4u.org)。 Emus4U配备了全方位的模拟器,经过修改的应用和大量付费内容,现在可以免费访问。 其他此类应用程序安装程序是TuTuApp,TweakBox,Appvalley和vShare。 与此类安装程序相比,Cydia确实为您的设备增加了更多功能。 但是,像Taig,Pangu和PP团队这样的开发人员似乎不太愿意生产从iOS安全工作退步的越狱实用程序。 在没有它的情况下,这些诸如Emus4U的App安装程序确实可以很好地实现其目的,并提供了广泛的功能。 Emus4u适用于iOS用户的功能: 让我们看一下Emus4U必须提供的一些功能: *它支持所有版本的iOS操作软件和iOS设备。 *在您的设备中安装非常容易。 *界面友好,易于浏览选项。 *定期更新和改进为Emus4U用户提供了所有最新内容和版本的Apps。 *它提供了出色的客户支持服务。 *它提供对许多流行的模拟器以及Snapchat ++等++应用程序的访问。 *它带有内置的屏幕录像机。 *它还带有内置的Cleaner,可从设备中删除不需要的垃圾和临时文件。 *它向用户提供多种主题的选择,以个性化体验。 *最重要的是,您无需任何越狱即可访问Emus4U的任何功能。 如何下载Emus4u: 要使用Emus4U提供的这些功能,您需要将其下载到设备中,只需执行几个简单的步骤即可完成。 单击以下链接以获取完整的指南和链接,以下载Emus4U。 如果您发现Emus4U不能满足您的要求,并且希望从设备上将其卸载,则可以通过几个简单的步骤轻松完成。 单击链接的帖子,找到从您的设备删除Emus4U的步骤。 此外,由于它是通过非官方来源下载的,因此苹果可能会撤销运行Emus4U的证书。 结果,应用程序可能会不断崩溃。 下载Anti-Revoke可以帮助您防止这种情况的发生,并享受Emus4U的不间断服务。 苹果承诺将在驱动器中提供增强功能以​​阻止越狱。 尽管他们确实提出了改进措施,但是仍然需要越狱才能满足 用户的需求。 但是在没有越狱进展的情况下,Emus4U无疑会为用户提供一个有用且方便的停靠站。

如何在Xcode中创建iOS应用的多个版本

您要创建同一iOS应用程序的多个版本,但会有些微差异吗? 对于我们的语言学习应用,我们确实遇到了这个问题。 我们有一个应用程序可以学习泰语,而我们希望使用同一应用程序的另一版本来学习汉语。 因此,这两个应用应具有以下差异: 不同的应用名称 不同的捆绑ID 加载了不同的数据库(中文和泰语) 不同的应用程序图标 应用程序中的不同资产,例如图标和音频文件 让我们逐步解决这些问题。 1.为每个应用程序创建新的配置 首先,您需要为应用程序的调试版本创建一个新的配置,为应用程序的发行版本创建一个新的配置。 在Xcode中,通过在项目导航器中单击项目根文件夹来打开项目信息。 在左侧,选择您的项目。 确保在顶部选择“信息”。 在“配置”下,按“ +”以复制您现有的调试配置。 然后再次按“ +”以复制您现有的发行版配置。 对于我们的示例,我们将配置命名为“ Thai Debug”,“ Thai Release”,“ Chinese Debug”和“ Chinese Release”。 2.调整配置设置 现在,我们需要调整每个配置的设置,以反映两个应用程序之间的差异。 为了简单起见,我们直接在Xcode中更改设置。 (如果您想改用.xcconfig文件,强烈建议您先阅读本教程。) 更改捆绑ID:确保在项目导航器中选择了根文件夹。 在左侧,选择您的项目目标。 选择顶部的“ Build Settings”,并确保选择“ All”(相对于“ Basic”)。 搜索“产品包”。 在“产品捆绑包标识符”部分中,为不同的配置提供以下标识符:“ com.example.thai”(用于“泰国发行”),“ com.example.thai.debug”(用于“泰国调试”),“ com.example”。 “中文”表示“中文发行版”,“ com.example.chinese.debug”表示“中文调试”。 更改应用程序名称:再次,选择顶部的“构建设置”,然后搜索“产品名称”。 在“产品名称”部分,将名称更改为“ Learn Thai”,“ Learn Thai Debug”,“ Learn Chinese”和“ […]

启动应用程序:从激动到消防

推出您长期从事的工作,这是令人激动的成就。 我应该知道。 我最近启动了Capsicum,这是iOS的每日计划程序,在过去三年中,我一直与我的朋友和联合创始人Ish ShaBazz合作。 作为设计师,我很喜欢细节,老实说,我很难准备好分享自己的工作,因为总有一些我想改进。 但是,Ish和我都同意,启动和交付增量改进总比根本不启动更好。 尽管如此,我们还是尽力考虑一下。 在开发过程中,我们进行了公开Beta测试,对工作进行了很多次修改,并根据收到的反馈进行听取意见并采取行动。 我们制定了计划于2018年12月28日推出,因此适合希望在新年开始新计划者的人使用。 而我们做到了! 在发布之前,有很多奔波和深夜。 有血,汗水和眼泪。 但是我们也能够取得胜利。 我们没有放弃。 我们将项目推向了世界! Ish鼓励我在发布前几周与媒体联系,并邀请他们参加我们的测试版。 我没有做好准备,因为我还在做最后的事情。 我没有想要制作的所有宣传画册。 但是,最终我使用了Dropbox Showcase制作的基本新闻资料袋,并打算在以后添加更多内容,以便以后可以向其发送后续电子邮件。 我不确定有人会写关于我们的信息。 在发布的那天,我向我先前联系的人发送了后续电子邮件,以使他们知道该应用程序现在已在App Store上可用。 整天,我感到惊讶和兴奋,我们得到了一些重大新闻报道! 它从TechCrunch开始,并从那里继续。 9to5Mac和iMore覆盖了我们。 后来出现了iDownloadBlog和CNET。 这些文章导致下载量猛增。 然后,随着下载的到来,大量的支持请求和负面的1星级评论。 一些关键错误已通过我们的测试进入发布阶段! 有些用户无法创建帐户(使用该应用程序不是必需的,但仍然有用),有些用户则显示一条横幅,说他们的试用期从开始就已经过期(尽管该应用程序仍可以正常运行),而其他用户则无法看不到他们的笔记。 我们进入了危机模式。 非常激烈。 我们立即向Apple提交了修复程序。 我们回复了人们,让他们知道即将解决的问题,而且值得庆幸的是,大多数人都非常了解。 我们认为那些花时间写信的人一定要注意并希望它能正常工作! 仍然有人批评我们的应用程序基于订阅。 我们一直都知道会有一些人不喜欢订阅模式。 我们认为这是使其可持续发展的最佳选择,因此我们可以在可预见的将来继续努力。 我们知道每个人都做不到,但有些人做得到。 有些人发现该应用程序对他们来说具有难以置信的价值,并喜欢它。 而且我们希望一直保持改进。 我与其他开发人员组成的Slack小组分享了我在负面评论和错误报告方面遇到的困难,因为我试图做出响应并解决这些问题。 朋友戴夫·伍德(Dave Wood)回答我说:“寻找主题,同意对每个主题的一般性回应,然后在必要时返回并对该回应发表评论。 我建议采用这种方法,这样您就不会觉得自己像是在做消防或必须跳到每一件事,因此您可以退后一步,根据自己的路线图和应用程序的位置评估事情。” “消防”这个词对我来说确实很突出。 因为那正是它的样子。 到处乱跑并灭火。 这造成了巨大的情感损失。 但是与此同时,我们的开发人员社区向我们表示祝贺,他们写了他们喜欢它的文章,而Apple要求我们提供促销艺术品,因为他们正在考虑以我们为特色。 也有很多令人兴奋的事情。 有高有低。 自从两周前发布以来,我们在App Store上获得了四个附加更新,包括错误修复,改进和新功能。 […]

使用订单文件提高应用程序性能

为您的应用下订单 介绍 iOS应用程序的二进制文件可能为数十兆甚至数百兆字节。 这么多的数据需要花费一些时间才能加载到内存中,这是隐藏的性能成本。 订单文件可加快将应用程序二进制文件加载到内存中的过程,从而提高整体性能。 要了解它们,我们首先必须看一下分页。 分页 操作系统将数据以页(即固定大小的块)(每个iPhone为16 KB)的大小加载到内存中。 每当调用一个函数或从二进制文件访问一条数据时,操作系统就会加载包含该函数的页面。 即使该功能仅占用页面的一小部分,操作系统仍将加载整个页面。 因此,如果存在碎片,即一起调用的函数驻留在许多不同的页面中,则将有加载页面的开销,将它们保存在内存中。 订单文件可以减少碎片。 什么是订单文件? 顺序文件是提供给链接器的文件,用于指定应将所有函数和数据放入二进制文件中的顺序。 如果可以将通常一起调用的功能(例如,所有在启动时调用的功能)组合在一起,则可以提高应用程序的性能。 注意:仅当您选择了所有性能低下的水果后,才能处理订单文件。 这是一个更为复杂的优化,无法保证您将获得多少加速。 确定应该是什么顺序 总览 排序的一种好方法是在第一次调用每个函数时。 因此,它可能以main开头,然后是-[AppDelegate applicationDidFinishLaunching:…]等。为此,我们可以使用coverage sanitizer ,这是一个编译器功能,其中每个被编译的函数都会在每次运行时调用全局处理程序。 然后,第一次使用任何特定功能调用处理程序时,我们会将其记录在列表中,然后将该列表写到文件中。 使用Coverage消毒器进行编译 在您的Xcode构建设置中,在“其他C标志”下添加-fsanitize-coverage=func,trace-pc-guard 。 如果您使用的是Swift,请在“其他Swift标志”下添加-sanitize-coverage=func并打开地址清理器(可以在方案设置中完成)。 对于要链接到主二进制文件的所有内容,请确保包括这些标志,例如Cocoapods。 在运行时记录 将此代码和此标头插入您的应用程序。 然后,尽可能多地使用该应用程序,并逐一浏览功能,从最受欢迎的功能开始到最受欢迎的功能结束。 最后,调用CLRCollectCalls() ,它将返回被调用函数的列表。 将此列表写到文件中,每个调用都单独行,然后将“ Order file”构建设置更改为该文件的路径。 然后,再次构建项目,并通过将列表与nm -j -p 比较,来验证它是否已重新排序。 两者应该匹配。 结论 订单文件可以减少内存消耗和CPU时间。 目前,它对于您的应用可能不是必需的或无用的,但它是您可以在需要时使用的另一种工具。 本文仅介绍如何在二进制文件中排序函数,但是如果有人要求,我也可以讨论如何在二进制文件中排序数据(例如,常量字符串)。

10小时内的Appdevcon 2018

3月16日,我到达阿姆斯特丹的PathéArena。 今天,标志性的电影院都与 Appdevcon 有关, Appdevcon 是应用程序开发人员(主要)为应用程序开发人员而举行的年度会议。 我进入,迅速拿起我的徽章,然后上楼梯去会议厅。 在那儿,我加入了越来越多的排队等候咖啡的开发人员。 在他们的背后,像CocoaheadsNL,荷兰Android用户组,Appsterdam和Egeniq(活动组织者)这样的赞助商正在共享美食。 拿到急需的黑咖啡和一瓶水后,我去了13号馆进行当天的第一次演讲。 演讲者:Ash Furrow ( Artsy ) 主题:通过建立更好的团队来构建更好的软件 一个非常鼓舞人心的演讲,与实际的发展无关。 相反,Ash专注于管理心理学以及如何为在那里的团队创造最佳的工作环境-从而构建更好的软件。 简而言之:创造一个每个人都感到安全,没有任何羞辱的空间,并有足够的空间进行公开讨论。 这将使人们指出错误,承认错误,最重要的是从错误中学习。 怎么样? 假设每个人都在尽自己最大的努力,预期并解决苦难,并始终表现出同情心。 此外,Ash推荐Radical Candor作为一本不错的书,并总结了协同作用的概念,因为“……团队是团队合作的总和”。 演讲者:保罗·哈德森( 用Swift破解 ) 主题:如何像专业人士一样进行调试 Pauls的话题全部是关于iOS和Swift的。 Paul从一个非常熟悉的示例开始,在代码中包括print()来检查问题,然后是另一个print()然后是另一个,然后是另一个……然后,您明白了。 Paul提供的解决方案很简单: 断点 。 他演示了如何使用它们在激活时自动打印东西或播放声音。 Paul解释说,而不是删除断点,而是检查BreakpointManager枚举以使其为有条件的。 假设您要调试登录流程。 将BreakpointManager.login设置为’true’,所有登录流程断点将被激活。 由于某些断点适用于所有应用程序,因此您甚至可以在团队中共享它们。 Paul还分享了其他有用的调试技术,该网站真棒,使他们对Assert,Precondition和FatalError有所了解,并为我们提供了许多新的见解。 咖啡时间(休闲时光! 在拍摄下一张咖啡因时,我遇到了前同事Dylan Drost,他刚刚在Cross Platform大厅完成了关于Flutter的演讲。 我请他分享精彩片段,他很高兴地做到了: Flutter的当前状态,例如Dart语言的自定义渲染引擎 Flutter当前缺少可用于生产的内容,例如视频播放和其他基本本机功能 Google大量投资Flutter和Android,因此实际上是在与自己竞争 Google的新操作系统Fuchsia可能会在Flutter被采纳为Android的替代品时发挥作用 我很快又给自己喝了杯咖啡,坐下来进行下一次演讲。 演讲者:Phil Nash( Jetbrains ) 主题:可选不是失败 Phil首先讨论了函数的域和共域,并继续探讨Swift的发展方式,在错误处理方面缺乏该语言,以及如何以及为何引入可选函数。 […]