我的第一个安卓应用程序

by Harshita Arora

通过Harshita Arora

今天,我启动了我的第一个移动应用程序。 这是我学到的 (Today I launched my first mobile app. Here’s what I learned)

I’ve been writing a fair bit on Medium recently, sharing valuable design and development knowledge I gained from working on my first app, Crypto Price Tracker that I just launched today, on 28th Jan.

我最近在“ Medium”上写的相当不错,分享了从我于1月28日刚刚发布的第一个应用程序Crypto Price Tracker的开发中获得的宝贵设计和开发知识。

I wanted to share my story of working on this app from the day I started until today. I hope this post helps and inspires other young programmers (or really anyone who’s interested in making tech products!) to acquire valuable technical skills, identify market needs, build great products with their skills that solve those market needs.

我想分享我从开始到今天一直在使用此应用程序的故事。 我希望这篇文章能帮助并激发其他年轻的程序员(或者实际上是对生产技术产品感兴趣的任何人!)获得宝贵的技术技能,确定市场需求,利用他们的技能来开发出能够解决这些市场需求的优秀产品。

A bit of background on me: I’m a 16-years-old homeschooler. I’ve been learning digital design and programming since I was 13. I was the youngest intern at Salesforce in Bangalore in winter 2016.

我的背景:我是16岁的家庭学生。 我从13岁起就开始学习数字设计和编程。我是2016年冬季在班加罗尔Salesforce最小的实习生。

I attended MIT Launch summer program in 2017 summer where my team and I launched Universeaty. That was the first time I tried my hands at iOS apps and loved how much faster it was to build tangible products and see results of my work when building mobile apps. Bringing my ideas to software was much easier and more fun!

我参加了2017年夏季的MIT夏季启动计划,在那里我和我的团队启动了Universeaty 。 那是我第一次尝试使用iOS应用程序,并且喜欢构建有形产品并在构建移动应用程序时看到我的工作成果要快得多。 将我的想法带入软件变​​得更加容易和有趣!

I started learning Swift and iOS app development from online courses on Treehouse, Udemy, watched videos on YouTube and practiced building basic apps. That laid out my programming foundations. I started building more serious and complex apps after a few weeks of learning and practice.

我从Udemy在Treehouse上的在线课程开始学习Swift和iOS应用开发,在YouTube上观看了视频并练习了构建基本应用。 这奠定了我的编程基础。 经过数周的学习和练习,我开始构建更严肃,更复杂的应用程序。

Around 20th November, 2017 I decided that I wanted to work on a cryptocurrency price tracker, alerts, and portfolio management app. I’ve shared a bit of the story about my motivation here. I recently realised that sharing my story and some of the lessons I learned along my journey is indeed helpful to others!

2017年11月20日左右,我决定要开发一个加密货币价格跟踪器,警报和投资组合管理应用程序。 我已经分享了一下这个故事对我的动机在这里 。 我最近意识到,分享我的故事和我在旅途中学到的一些教训确实对其他人有帮助!

入门 (Getting Started)

It was hard to get started: uncertainty, unknown unknowns, things to think about, and decisions to make. No clue what to start with and where. But I knew my first step was conducting some market research to know exactly what my target audience wanted — the features, the design, and just about everything that I’d build in the app.

很难上手:不确定性,未知未知数,需要考虑的事情以及要做出的决定。 不知道从什么开始以及在哪里开始。 但是我知道我的第一步是进行一些市场研究,以确切了解目标受众的需求-功能,设计以及我将在应用程序中构建的几乎所有内容。

I posted on Reddit, Facebook groups, Quora, and asked a few friends who were invested and interested in cryptos. I got some solid feedback on the idea and was much more educated about the needs of my target users.

我在Reddit,Facebook团体,Quora上发帖,并问了一些对加密货币有兴趣的朋友。 我对该想法有一些可靠的反馈,并且对目标用户的需求有了更多的了解。

The next step was to design the app. I started with drawing the user-flow diagrams and wireframes. I then moved on to using design software to create mock-ups and a prototype. I’ve written a different story about designing mobile apps from scratch, and I’ve shared pictures of every design stage of Crypto Price Tracker app.

下一步是设计应用程序。 我从绘制用户流程图和线框开始。 然后,我继续使用设计软件来创建模型和原型。 我写了一个关于从头开始设计移动应用程序的故事 ,并且分享了Crypto Price Tracker应用程序每个设计阶段的图片。

And the end result of this process was this:

这个过程的最终结果是:

开发加密货币价格跟踪器 (Developing Crypto Price Tracker)

I was pretty afraid of reaching this stage, because I was (and still am) a programming beginner. I didn’t know a lot of Swift and had no clue how I’d set up the server for notifications, among many other technical hurdles. I had so much stuff to do for the app with little technical skills. But I was confident I could figure out things and learn along the way as I build each feature. And, in hindsight, I can say I did :)

我非常害怕达到这个阶段,因为我(现在仍然)是编程初学者。 我对Swift并不了解很多,也不知道如何为通知设置服务器,还有许多其他技术障碍。 我需要做的事情很多,而技术技能却很少。 但是我有信心在构建每个功能时可以弄清楚事情并从中学习。 而且,事后看来,我可以说我做到了:)

I started out with importing all the designs in Xcode and setting a raw build for every screen. I divided my coding work based on features I’d need in the app. Quite a few times, I had to scrap things off my spec (and edit designs) because they seemed time consuming to develop (especially if it seemed that they’d offer little functionality).

我首先将所有设计导入Xcode,然后为每个屏幕设置原始版本。 我根据应用程序所需的功能划分了编码工作。 相当几次,我不得不从我的规范中删除某些东西(并编辑设计),因为它们似乎很耗时(特别是看起来好像它们提供的功能很少)。

I wrote the networking code to display data from the APIs I was using and built the main interface of my app. I then moved on to the “Wishlist” feature of the app. Now, to save data locally in a user’s phone, you need to create Core Data models — something I had never worked with before. And more technical gaps and challenges came up.

我编写了网络代码以显示来自正在使用的API的数据,并构建了应用程序的主界面。 然后,我转到应用程序的“收藏夹”功能。 现在,要将数据本地保存到用户的手机中,您需要创建Core Data模型-我以前从未使用过。 并且出现了更多的技术差距和挑战。

But I kept on learning. When I needed something, I’d Google it. Usually, there were helpful answers, code snippets, or video tutorials for almost everything. Whenever I got stuck, I would ask on StackOverflow or email my mentors for help. Slowly, I started becoming much more comfortable jumping into unknown things.

但是我一直在学习。 当我需要某些东西时,我会用Google进行搜索。 通常,几乎所有内容都有有用的答案,代码段或视频教程。 每当遇到困难时,我都会在StackOverflow上询问或通过电子邮件向我的导师寻求帮助。 慢慢地,我开始变得更加自在地跳入未知的事物。

At the end of the three weeks that I spent coding the app, I improved a lot as a programmer. I learnt concepts and got to actually practice by building a real app. I got to work with a number of interesting iOS technologies, libraries, and frameworks.

在我为应用程序编写代码的三个星期结束时,作为一名程序员,我有了很大的进步。 我学习了概念,并通过构建一个真正的应用程序来进行实际练习。 我开始使用许多有趣的iOS技术,库和框架。

I still need to improve a lot as a developer. My app sometimes loads slow. It’s not the most optimised or the fastest app out there. But I’m still pretty glad I was able to build something useful and valuable.

作为开发人员,我仍然需要提高很多。 我的应用有时加载缓慢。 它不是目前最优化或最快的应用程序。 但是我仍然很高兴能够构建出有用且有价值的东西。

The next step I had planned was that I’d localize my app in 10 languages. I thought it was easy since my app isn’t text-heavy. Boy, I was wrong! Localization is a very time consuming process for apps. I’m writing a separate story to explain how to localize technically.

我计划的下一步是用10种语言本地化我的应用程序。 我认为这很容易,因为我的应用程序不占用大量文字。 男孩,我错了! 本地化对于应用程序来说是非常耗时的过程。 我正在写一个单独的故事来解释如何在技术上进行本地化。

At the end of 8 weeks (from the day I started market research), I had fully designed and developed an app that showed real-time prices of over 1000+ cryptocurrencies from 18 exchanges in 32 fiat currencies. There were price graphs (showing historical prices from 1 day, 1 week, 1 month, 3 months, and 1 year), portfolio management, time-based and threshold-based alerts. It was localized in 10 languages. I also optimised my app for iPhone X.

在8周结束时(从我开始进行市场研究的那一天起),我已经完全设计和开发了一个应用程序,该应用程序显示了来自18个交易所的32种法定货币的1000多种加密货币的实时价格。 有价格图(显示1天,1周,1个月,3个月和1年的历史价格),投资组合管理,基于时间和基于阈值的警报。 它以10种语言进行了本地化。 我还针对iPhone X优化了我的应用程序。

Once my build was ready, the next step was to invite users to test and give feedback on the app.

准备好我的构建后,下一步就是邀请用户进行测试并提供有关该应用程序的反馈。

测试并提交应用 (Testing and Submitting the App)

I was quite proud of my app and was super excited to put it out there on TestFlight and invite all of my friends and users to test it! After a long wait of two days, the beta app review was finally approved. I invited my friends to test it and they loved the app. All of them shared feedback, ideas for features to have in future updates, and much more. The app had zero crashes!

我为我的应用程序感到非常自豪,非常高兴能将其发布到TestFlight上,并邀请我所有的朋友和用户进行测试! 经过两天的漫长等待,Beta应用程序审查最终获得批准。 我邀请我的朋友来测试它,他们喜欢这个应用程序。 他们所有人都共享了反馈,有关将来更新中的功能的想法等。 该应用程序的崩溃次数为零!

The v1.0 build was all ready for submission. My 100 screenshots (5 screenshots for iPhone 5.5 inch and 5 for iPhone 5.8 inch for each language) were ready, my metadata was localized too, and my video preview was done.

v1.0版本已准备好提交。 我的100个屏幕截图(每种语言的5张iPhone 5.5英寸屏幕截图和5张iPhone 5.8英寸屏幕截图)已经准备好,我的元数据也已本地化,并且我的视频预览也已完成。

There were some unexpected challenges in uploading the video preview because the fps (frames per second) was too high. By this point I had grown to embrace unexpected challenges and was able to handle them effectively. I was able to finish everything and submit the app for review on time.

由于fps(每秒帧数)过高,因此在上传视频预览时遇到了一些意想不到的挑战。 至此,我已经成长为能够应对意外挑战并能​​够有效应对这些挑战。 我能够完成所有工作,并按时提交应用程序以供审核。

Two days later, at 4AM, I got the rejection email.

两天后,凌晨4点,我收到了拒绝邮件。

This made me extremely anxious. So many thoughts were rushing through my head before I read the reasons for rejection. Apple rejected the app because the design didn’t look good when viewed on iPad. I had no clue that iPhone-only apps had to be compatible with iPads as well. In the next few hours, I read some guides and fixed all the constraints and Auto Layout issues, tested the app on iPad simulator and it worked. I submitted the build for review again.

这让我非常着急。 在我读到拒绝的原因之前,有这么多想法在我脑海涌动。 苹果拒绝了该应用程序,因为在iPad上观看时该设计看起来并不好。 我不知道纯iPhone应用程序也必须与iPad兼容。 在接下来的几个小时中,我阅读了一些指南,并修复了所有约束和自动版式问题,在iPad模拟器上测试了该应用程序,该应用程序正常运行。 我再次提交了构建以供审核。

One day later, I finally got the approval! It was a relief, and now I could focus back on the product. I had gotten a ton of feedback and bugs reported from testers. I made those small bug fixes and some translations edits, and uploaded the final build. It got approved in just 12 hours! My app was now a whole lot better and I’m glad so many people tested it and reported bugs that would have otherwise gone in the app reviews by angry customers.

一天后,我终于获得批准! 这是一种解脱,现在我可以专注于产品了。 我收到了测试人员报告的大量反馈和错误。 我进行了一些小错误修复和一些翻译编辑,并上传了最终版本。 它在短短12个小时内获得批准! 我的应用程序现在已经好很多了,我很高兴有很多人对其进行了测试并报告了一些错误,这些错误本来会在愤怒的客户中出现在应用程序审查中。

In the days leading up to launch, I put together this story from the notes I made and my daily journal so I could share the lessons with everyone.

在发布前的几天,我将自己制作的笔记和每日日记中的故事放在一起,以便与大家分享课程。

我学到的一些教训 (Some Lessons I Learned)

  1. Localization is a great idea. Until now, I was regretting my decision of localizing my app in 10 languages. I’d written some Quora answers on how it was the most time-consuming thing I did for my app and I’d not advise any indie developer without the budget to outsource to localize. But now my opinion has changed. Localizing your app in 10–12 languages using Google Translate and having friends proofread it is a great way to reach a larger audience for your app. Apple also loves localized apps more. You can’t always get everything right and every possible string localized. But you can get 80% of the results (i.e., text translated) with the 20% of the work.

    本地化是一个好主意。 到目前为止,我很后悔我决定以10种语言本地化我的应用程序。 我已经写了一些Quora答案 ,说明这是我为应用程序做的最耗时的事情,并且我不建议没有预算的任何独立开发者外包本地化。 但是现在我的看法已经改变。 使用Google翻译将您的应用本地化为10–12种语言,并让朋友进行校对,这是一种吸引更多应用受众的好方法。 苹果还更喜欢本地化的应用程序。 您不能总是使所有事情都正确,并且每个可能的字符串都已本地化。 但是,只要完成20%的工作,您就可以获得80%的结果(即文本翻译)。

  2. People are much more willing to help you than you think. I am very grateful to have a number of friends and mentors who helped me a lot in this journey. But I was simply astonished how so many strangers responded to me when I reached out to them and helped me. Very early on in my journey, when I just had a little prototype of the main interface of my app, I reached out to Carla White after I had read her amazing book. She mentored me and helped me with her advice for the app. As I was localizing my app, I needed proofreaders for each language to make sure the translations (done using Google Translate) are good and context specific. Pascal commented on my story on Medium offering his help with German translations. I reached out to him and on a really short notice, he really did edit my German translations! And many more complete strangers offered their help.

    人们比您想的更愿意帮助您。 我非常感谢有很多朋友和导师在这段旅程中为我提供了很多帮助。 但是当我接触到他们并帮助我时,有这么多陌生人对我的回应我感到非常惊讶。 在旅途的早期,当我只有一个应用程序主界面的小原型时,在阅读了她的精彩著作后,我便与Carla White联系 。 她指导了我,并为我提供了有关该应用的建议。 在对应用程序进行本地化时,我需要每种语言的校对人员,以确保翻译(使用Google翻译完成)的质量和上下文相关。 Pascal评论了我在Medium上的故事,他提供了德语翻译方面的帮助。 我联系了他,在很短的时间内,他确实编辑了我的德语翻译! 还有更多的完全陌生人提供了帮助。

    One important key takeaway from this would be: People are willing to help you. Reach out to them, be sincere, and they will help you in any way they can! :D

    一项重要的重要收获是:人们愿意为您提供帮助。 向他们伸出援助之手,真诚地对待他们,他们将尽一切可能帮助您! :D

  3. User feedback early on is super critical. Not only do the kind words from your fans or believers motivate you, but a lot of your early users will give you ideas for features, for design improvements, and much more valuable feedback. One of the mistakes I made was testing very late. I uploaded my build for TestFlight testing only ~1 week before planned launch when the app was pretty much ready and I couldn’t make major changes. If I had asked my users to start testing weeks ago when I just had the main interface, I’d have gotten lots of feedback and would have improved upon it. And iterated that for every major feature, my app would have been a whole lot better. Quite a few testers have mentioned things that could have been fixed in 2–3 days if I had sent out the build for testing earlier. So my advice to everyone would be: Get your app in the hands of your users and have them test it asap and get feedback!尽早提供用户反馈至关重要。 不仅来自粉丝或信徒的好话会激励您,而且许多早期用户会为您提供有关功能,设计改进和更有价值的反馈的想法。 我犯的错误之一是测试很晚。 我仅在计划启动前约1周上传了我的版本以进行TestFlight测试,当时该应用程序已经准备就绪,我无法进行重大更改。 如果我几周前让我的用户刚开始使用主界面时就开始进行测试,那么我会得到很多反馈,并且会对此进行改进。 而且,对于每个主要功能,我的应用程序本来都会好很多。 如果我早些发送构建以进行测试,则相当多的测试人员提到了可以在2-3天之内解决的问题。 因此,我对所有人的建议是:将应用程序交到用户手中,让他们尽快进行测试并获得反馈!

我使用的一些有用的工具 (Some Helpful Tools I Used)

  1. AppLaunchPad for creating multiple sets of screenshots (for many localizations) faster.

    AppLaunchPad用于更快地创建多组屏幕截图(针对许多本地化版本)。

  2. Cocoapods. SwiftyJSON and Alamofire for writing better networking code, Charts for creating price graphs. There’s a cocoapod for almost everything!

    椰子足 。 SwiftyJSON和Alamofire用于编写更好的网络代码,而Charts用于创建价格图表。 几乎所有东西都有一个cocoapod!

  3. Firebase for the push notifications server and for the caching server to store prices every 5 mins to update the price graphs.

    用于推送通知服务器和缓存服务器的Firebase每5分钟存储一次价格,以更新价格图表。

  4. Two APIs for prices: cryptowatch and CoinCap. This API for currency rates for conversion.

    两种价格API: cryptowatch和CoinCap 。 此API用于货币汇率转换。

It feels great to be able to share the lessons I learned and my journey with a large audience. I hope this serves as an inspiration to other people to try out learning programming and building apps or really anything they’re interested in. I’m personally going to start out with learning ML and data science after my app — so don’t be afraid of experimenting with different fields! Try out something difficult and something that makes you uncomfortable. The things hardest to do are usually the most interesting and rewarding in the end. :)

能够与众多观众分享我的经验教训和旅程,真是太好了。 我希望这对其他人有启发性,他们可以尝试学习编程和构建应用程序或他们真正感兴趣的任何事物。我个人将在我的应用程序之后开始学习机器学习和数据科学,所以不要害怕尝试不同的领域! 尝试一些困难和使您不舒服的事情。 最后,最难做的事情通常是最有趣和最有意义的。 :)

If you liked reading this and have feedback or any thoughts to share, don’t hesitate to email me at harshita@harshitaapps.com. And if you like my app, you can download it from the App Store here. :)

如果您喜欢阅读本文档,并有反馈或有任何想法要分享,请随时发送电子邮件给我:haritata@harshitaapps.com。 而且,如果您喜欢我的应用程序,可以从App Store 此处下载。 :)

翻译自: https://www.freecodecamp.org/news/today-i-launched-my-first-mobile-app-heres-what-i-learned-6fc25c14eee6/

我的第一个安卓应用程序

我的第一个安卓应用程序_今天,我启动了我的第一个移动应用程序。 这是我学到的...相关推荐

  1. java反编译微信小程序_教你如何一键反编译获取任何微信小程序源代码(图形化界面,傻瓜式操作)...

    一键获取微信小程序源代码 1 Tips:2 一键获取微信小程序源码, 使用了C#加nodejs制作 直接解压在D盘根目录下后就可以使用 将小程序文件放到 wxapkg目录下 3 这个目录下有一些dem ...

  2. vscode中运行2个程序_在64位系统中运行32位或16位程序

    由于CPU和系统架构的更新,现行主流的Windows系统已经是64位.然而许多人还恋恋不舍的一些老游戏或老程序已经没有了更新.在64位的系统上运行这些程序,往往会出现运行故障.如何才能解决这个烦心事? ...

  3. ar 微信小程序_【看一看案例集】AR+微信小程序(1):认识篇

    去年,看一看科技"看看AR"."奇幻洛阳"等支持AR技术的小程序陆续上线.与此同时,不少商城也对"AR+小程序"产生浓厚的兴趣.但面对这么个 ...

  4. ar 微信小程序_微信AR玩法支持实现后,微信小程序会有想象空间吗?

    7月5日,微信小程序正式支持实现AR效果,并向品牌商户.AR引擎服务商开放接入.首个支持AR动态试妆的美妆品牌小程序"阿玛尼美妆官方精品商城"在7月5日同步更新上线. 界面记者体验 ...

  5. win32应用程序_驱动人生网卡版提示不是有效的应用程序,为什么和怎么办

    嗨!我是驱动哥,今天准备了一篇新的解决方案. 近期在用户在Q群上咨询驱动哥,用安卓手机下载驱动人生网卡版后,再传到电脑上出问题了. 如果电脑是Win7的系统就会提示[驱动人生网卡版exe不是有效的Wi ...

  6. 乌克兰停电是哪种恶意程序_乌克兰开发商开发了19个30亿个应用程序,因为硅谷太无知了...

    乌克兰停电是哪种恶意程序 重点(Top highlight) "I did 9 years at Yahoo." "我在雅虎工作了9年." Yes, Jan K ...

  7. 手机java程序_郑州北大青鸟:用手机也能编写Java程序代码?

    你是不是也很好奇酷炫的程序是如何运行,代码是如何实现的? 接下来就是见证奇迹的时刻,ACCP312班杨梦梦教你如何利用手机端写Java,详细步骤已上线! 第一步 在应用市场或者浏览器搜索AIDE,点击 ...

  8. node.js 程序_如何不使用外部程序包创建Node.js Web应用程序

    node.js 程序 by Abhinav Pandey 通过Abhinav Pandey 如何不使用外部程序包创建Node.js Web应用程序 (How to create a Node.js w ...

  9. 如何用python写一个答题程序_如何使用Python写一个百万英雄的答题辅助程序 (0) 简介...

    关于百万英雄 前不久被女票介绍过来这个活动,需要下载西瓜视频APP(现在好像今日头条全系产品都支持了).这个活动是现在很火的答题分钱模式,只要答对12题就能和所有获胜者一起平分奖金. 最开始遇到不会的 ...

  10. 用python写投票程序_大话python最终篇,web.py 开发的投票程序demo

    概述 开发语言         python Web开发框架  web.py 前端开发框架   vuejs+elementui 数据库              mysql 设计思路 首先是数据库设计 ...

最新文章

  1. 农民工看完都会了!java线程池面试问题
  2. FastDFS 学习笔记
  3. Condition总结-CountDownLatch源码分析
  4. pandas基础(part4)--排序/分组/合并
  5. oracle外部表kup-04040,【故障处理】19c PDB中创建外部表时,出现KUP-04040报错
  6. python中的流程控制
  7. 算法分析与设计「五」动态规划
  8. Netty学习总结(2)——Netty的高性能架构之道
  9. oracle如何查看某个时间段调用的函数的异常信息_每天14点遭遇惊魂时刻,如何一步一步揪出真凶?...
  10. 机器学习- 吴恩达Andrew Ng Coursera学习总结合集,编程作业技巧合集
  11. AD 批量修改封装 元件以及封装的关系 以及快速查找器件
  12. docker容器无法使用top命令
  13. nginx php 后缀名,nginx如何隐藏后缀名php
  14. DirectX12(D3D12)基础教程(八)——多显卡渲染基础、共享纹理、多GPU同步
  15. Apache中文URL中有包含“\x85”字节的汉字时导致的Rewrite失败及404问题
  16. BlueCoat被私募股权公司收购
  17. 如何运用InSAR技术进行数据处理、地形三维重建、形变信息提取、监测
  18. linux下添加JAVA_HOME环境变量
  19. Dubbo - Dubbo的SPI机制
  20. c++操作符重载,拷贝构造函数和友…

热门文章

  1. 媒体控件的暂停与播放 0130 winform
  2. 0924html小测答案
  3. Linux中配置文件复制粘贴格式错乱
  4. PHP设计模式之抽象工厂模式
  5. 编写.gitignore文件
  6. MHA manage节点安装报错解决
  7. Linux开发商计划停止开发32位版本
  8. *循环单链表[带头结点]
  9. WP7 开发(十五)输入范围和文本框
  10. PHP5时间相差八小时问题[三种方法]