I’m not going to be talking about nice to have things like documentation, user stories, etc. Let’s talk about absolutely essential, nonnegotiable things.
I had clients who didn’t even know what source code was and why they needed to have it. Let me explain what it is. If you know it already, just skip this part of the article.
Basically, source code is the text of the program that a programmer writes. Usually it comes in the form of a folder with a bunch of subfolders and text files. Not txt files, but you can open them as text files and read the code. From time to time while working on your project your developer would make a build and send it to you for testing. A build is just a binary file. Binary means that the file contains just zeros and ones and you can’t read it as you would a text file. For Android app it is an APK file, for iOS it is an IPA file (although for iOS they would probably send you a download link, so you wouldn’t even see the actual file).
Those files are just builds, they are not source code. You can run them on your phone, but you cannot publish them. And if your current developer quits on you, you can’t just take the build file to another developer and ask him to continue the work on your project. You’d need to have source code for that.
One of my clients didn’t know about it or rather didn’t think it was important. A freelance developer did some work on his app, published the app and then didn’t provide the source code. After some time when my client needed to do some more work on his project he found out that the freelancer wouldn’t respond. So, he had to hire another developer, but since their was no source code for the previous part of the work, he had to send the new developer the older version of the source code and pay him to basically do everything that has already been done by the previous developer.
Keys for app-signing
The troubles of my client didn’t end with having to do the same work two times and pay double price for it. When the job was done for the second time the new developer started asking for some “key”, because he couldn’t upload the app to the Google Play store. Obviously this developer was not very experienced because he didn’t propose any solutions but just kept on asking for the key. So my client had to ask me for help.
Turned out that the previous developer generated an upload key and didn’t provide it to the client. What is the key? Basically, every time you upload a version of your app to the Google Play store you need to sign it. There are two ways you can do it. You can sign it yourself with your app signing key (not recommended) or you can enrol in app signing by Google (recommended). In the latter case you still need a key, but instead of an app signing key you need an upload key.
If you signed your app manually with an app signing key, published it and then lost your key, you wouldn’t be able to update your app in the Google Play store. You’d have to publish an update as a separate app.
In our case my client’s app was enrolled in app signing with Google. So we only needed an upload key. Fortunately, it is possible to register a new upload key if you loose or compromise your current key. That’s why it is recommended to use app signing by Google. So, I just generated a new upload key, then wrote to the Google support asking to register the new key. They did it the next day, but said that the new key will be active 1 or 2 days later (I don’t remember exactly, but activation wasn’t immediate). The problem was solved, but my client had to actually pay me some money for my help. This could have been avoided it he knew about app signing beforehand and asked his previous developer to provide the key.
You only need one upload key for your account. Then you can use it to upload any number of apps and app updates. So if you hire a developer to do your first android app, make sure they give you your upload key. What you need to get from your developer is a keystore – a file with jks extension, and two passwords: keystore password and key password. Alternatively, if you know how, you can generate this key yourself and then send it to your developer, so they can publish your app.
For the iOS app you need to get a distribution certificate with a private key. Your developer should send it to you in the form of a p12 file. Check that the private key is actually there. Double click the file and it should be imported into your Keychain (make sure you are using a Mac computer). You should see the private key there. Again, as with android you can generate this key beforehand if you know how, and then send it to your developer.
With iOS apps it is not that important to actually get that key from your developer, because you can revoke the certificate and create a new one anytime you want. You don’t need to contact Apple’s support for that.
There is one caveat though, but it most likely doesn’t concern you. If you have an enterprise Apple developer account and you have an in-house app (an app published on your server and not on the App Store), then you should be careful with your distribution certificates and keys. If you revoke a certificate with which your in-house app has been signed that will kill the app. You’d have to republish it.
If you want to be an Appreneur and publish a lot of small apps, you’d be better off if you learned a few things first.
Learn how to use git. Use GitHub or Bitbucket. That will allow you to have your own code repositories. So instead of receiving archived source code from your developers and then dealing with multiple archives you’d be able to invite developers to your repository. They will push the changes to your repository as they work on your project.
Another useful skill would be the ability to build code from sources. That will allow you to check that the code actually works. You should be able to pull the code from your repository to your computer and then run it on your simulator or an actual device.
And also learn to publish your apps yourself. You can invite developers to your Google Play console and let them publish your app for you, but Apple doesn’t provide such option unless you have an enterprise account ($299 a year). If you have an individual account ($99 per year) you’d have to give your developer login and password from your account. Do you want to entrust your account to some random freelancers? What if they go crazy and delete all your apps?
I had a client who was an appreneur. He had a lot of small apps. And he had a system in place. I just did the coding and pushed the code to his repository. I didn’t have to create builds for testing because he would build from the source himself, and I never had to publish his apps, because he was doing it himself.