You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Welcome, Developer! This guide will provide an overview of the App Fair development, release, and maintenance process. If you are already a mobile app developer, some of these sections will be review – but we encourage to read thoroughly regardless. The App Fair is a unique method of app development, and even if you have already shipped apps for the iPhone or Android (or both), many of the concepts presented here will be novel.
22
14
23
15
The document is currently a **draft** of the creator guide. Many sections are still works in progress. Please post questions and feedback on the [App Fair discussion forums](https://github.com/orgs/appfair/discussions).
24
16
{: class="callout error"}
25
17
26
-
### About the App Fair Project
27
-
{: #about-app-fair}
18
+
### About the App Fair Project {#about-app-fair}
28
19
29
20
The App Fair is a nexus for mobile app developers to bring their creations into the hands billions of mobile device users around the world: all devices, all languages, all abilities. Apps developed for the App Fair are trustworthy because they are 100% free and open-source. This guarantees that there is no native advertising, hidden surveillance, surreptitious tracking, or privacy-violating analytics technologies embedded within the applications. The App Fair build and release process acts as a "seal of approval" for apps to indicate that they are honest and trustworthy.
30
21
31
-
#### Why develop an app for the App Fair?
32
-
{: #why-app-fair}
22
+
#### Why develop an app for the App Fair? #why-app-fair}
33
23
34
24
Creating an app for the App Fair is an opportunity to get your creation in the hands of billions of people around the world, regardless of their device, language, or ability level.
35
25
36
-
#### Who can create an app for the App Fair?
37
-
{: #who-app-fair}
26
+
#### Who can create an app for the App Fair? #who-app-fair}
38
27
39
28
Anyone with the ability and desire to build an app can be an App Fair Creator. You do not need any paid developer account with Apple or Google, only a free GitHub account. If you have a macOS development machine and the ability (or desire) to build an app in SwiftUI, you can create an app and – through the App Fair process – distribute your creation to the world.
40
29
41
-
#### What sorts of apps can I build for the App Fair?
42
-
{: #what-app-fair}
30
+
#### What sorts of apps can I build for the App Fair? #what-app-fair}
43
31
44
32
The App Fair is looking for _generally useful_ applications. This means that your app should be interesting and useful to a wide swath of humanity, irrespective of language or location. They should also be timeless: apps should not have any specific cutoff for their utility.
45
33
46
34
A central tenant of the App Fair catalog is that apps do not seek to monetize the attention of the user. This means that they can contains no native advertising or tracking SDKs. They must also be _transparent_, and so they must be built from 100% free and open source software. This is the guarantee that users (and external auditors) will have that they know exactly what went into the creation of the app.
47
35
48
-
### About distribution channels
49
-
{: #app-fair-channels}
36
+
### About distribution channels {#app-fair-channels}
50
37
51
38
The App Fair aims to distribute apps *worldwide*, so all of the mobile-device-using population (90% of the adult population, by most estimates) can benefit from your creation.
52
39
53
-
#### The App Fair
54
-
{: #app-fair-channel-app-fair}
40
+
#### The App Fair {#app-fair-channel-app-fair}
55
41
56
42
The App Fair app is a dual-platform iOS/Android app that can browse, download, install, and update apps from the App Fair catalog. It is available worldwide for Android, and (soon) will be available in the European Union for iOS. The App Fair app is the primary channel for distributing app fair apps.
57
43
58
-
#### The Apple App Store
59
-
{: #app-fair-channel-app-store}
44
+
#### The Apple App Store {#app-fair-channel-app-store}
60
45
61
46
The Apple App Store (AAS) is the primary 1st-party app store for Apple devices such as the iPhone and iPad. The AAS is pre-installed on all Apple devices sort worldwide, and is generally the first place that most users will go to discover and download applications for their phone or table.
62
47
63
-
#### The Google Play Store
64
-
{: #app-fair-channel-play-store}
48
+
#### The Google Play Store {#app-fair-channel-play-store}
65
49
66
50
The Google Play Store (GPS) is the primary 1st-party app store for most Android devices, such as the Google Pixel and Samsung Galaxy phones. The GPS is available and pre-installed in most devices worldwide (barring China), and is typically one of the first places that Android users will go to install apps on their Android devices.
67
51
68
52
<!--
69
53
70
-
#### AltStore
71
-
{: #app-fair-channel-altstore}
54
+
#### AltStore {#app-fair-channel-altstore}
72
55
73
-
#### F-Droid
74
-
{: #app-fair-channel-fdroid}
56
+
#### F-Droid {#app-fair-channel-fdroid}
75
57
76
58
-->
77
59
78
-
## Getting Started
79
-
{: #getting-started}
60
+
## Getting Started {#getting-started}
80
61
81
-
### Before you start
82
-
{: #before-starting}
62
+
### Before you start {#before-starting}
83
63
84
64
Before you dive into developing your app, you should first check whether the app idea already exists as an App Fair project. The App Fair generally discourages apps with identical intent. Unlike commercial app catalogs that aim to build quantity, the App Fair aims to feature a few best-in-class applications in their categories. You can browse the list of app projects at [appfair/repositories](https://github.com/orgs/appfair/repositories) to see if an app already exists that closely resembles your idea for a contribution. If so, you may with to instead contribute toward the improvement of that app project rather than duplicating effort.
85
65
86
-
### System Requirements
87
-
{: #sysreq}
66
+
### System Requirements {#sysreq}
88
67
89
68
In order to develop an app for the App Fair, you need to have a macOS development machine capable of running the latest Xcode IDE. App Fair apps are developed with [Skip](https://skip.dev), which enables the development of iOS and Android apps from a single SwiftUI codebase, and Skip requires Xcode.
90
69
91
-
#### Choose a unique name
92
-
{: #naming}
70
+
#### Choose a unique name {#naming}
93
71
94
72
Your app needs to have a distinctive and unique name that is not the name of any other app in the App Fair, Apple App Store, or Google Play Store.
95
73
96
74
It can be difficult to conclusively verify ahead of time that a name is available because there are many "name-squatters" on the commercial app stores. Don't get too attached to your original idea, unless you are somehow quite certain that it is totally unique. It is easy to change the name of an app before publication, so our advice is to not spend too much time picking a name up front, since you might need to change it later anyway.
97
75
{: class="callout error"}
98
76
99
-
### Make a proposal
100
-
{: #proposal}
77
+
### Make a proposal {#proposal}
101
78
102
79
When you have an idea for an app, you may want to propose it on the [App Fair discussion forums](https://github.com/orgs/appfair/discussions). This will give the community the opportunity to provide feedback on the idea, as well as make an assessment about whether the app will be suitable for distribution through the Ap Fair.
103
80
104
81
Creating a proposal is optional, but it is a good way to get community feedback on your idea before you invest effort in building something that might not fit well with the App Fair's mission or needs.
105
82
{: class="callout warning"}
106
83
107
-
### Creating an organization and repository
108
-
{: #new-org-repo}
84
+
### Creating an organization and repository {#new-org-repo}
109
85
110
86
Every App Fair app must be represented by a unique GitHub organization. An organization can be created for free by going to [https://github.com/account/organizations/new?plan=free](https://github.com/account/organizations/new?plan=free). It can be created an managed by an individual, or many people can be invited to participate in the app's development.
111
87
112
88
The organization's name should be the application ID, which will typically be the app's name. For example, for the "App Name" app, and organization named "App-Name" should be created.
113
89
114
90
Once the organization is made, the app's repository should be created by going to [https://github.com/new](https://github.com/new). The repository name must exactly match the organization name (e.g., "https://github.com/App-Name/App-Name"). The repository should be public and empty (no README, .gitignore, or license files). The contents will be added in the next steps.
115
91
116
-
### Initializing the app
117
-
{: #init-app}
92
+
### Initializing the app {#init-app}
118
93
119
94
App Fair apps are developed using [Skip](https://skip.dev), which is the technology that enables the creation of a dual-platform iOS+Android app from a single Swift codebase. Follow the [Getting Started](https://skip.dev/docs/gettingstarted/) instructions for setting up Skip on your machine, except then it comes to the creation of the app, the following command should be used instead (substituting "App-Name" with the name of the repository you just created):
120
95
@@ -140,185 +115,148 @@ In addition to creating the repository, the app is also set up with a GitHub con
140
115
{: class="callout warning"}
141
116
142
117
143
-
## Developing
144
-
{: #developing}
118
+
## Developing {#developing}
145
119
146
-
### App development guidelines
147
-
{: #app-guidelines}
120
+
### App development guidelines {#app-guidelines}
148
121
149
122
By now you already know the fundamental requirements of an App Fair app: they must consist of 100% free and open-source software, and they must respect the privacy of the user by not embedding any tracking, surveillance, or advertising tech.
150
123
151
124
There are a number of other guidelines that App Fair apps should also strive to follow:
152
125
153
-
#### Respect offline mode
154
-
{: #guideline-offline}
126
+
#### Respect offline mode {#guideline-offline}
155
127
156
128
Apps should work in a variety of network conditions: fast wi-fi as well as slow and metered cellular. It should generally be possible to continue to use the app in an "offline" mode.
157
129
158
-
#### Be fast to launch and efficient with memory and battery
159
-
{: #guideline-fast}
130
+
#### Be fast to launch and efficient with memory and battery {#guideline-fast}
160
131
161
132
_writing in progress…_
162
133
163
-
#### Provide in-app guidance
164
-
{: #guideline-guidance}
134
+
#### Provide in-app guidance {#guideline-guidance}
### Managing localization and translations {#app-localization}
249
203
250
204
_writing in progress…_
251
205
252
206
253
207
## FAQ
254
208
255
-
### What software licenses can be used with the App Fair
256
-
{: #faq-license}
209
+
### What software licenses can be used with the App Fair {#faq-license}
257
210
258
211
The top-level app project must be made available under the GNU General Public License (GPL) version 3 in order to qualify to be distributed through the App Fair. The app can have dependencies on libraries that are available under any of the GPL-compatible OSI-approved licenses, such as the Apache, BSD, and MIT licenses.
259
212
260
-
### Why Skip instead of Flutter/React Native/Xamarin/MAUI/etc?
261
-
{: #faq-skip-xp}
213
+
### Why Skip instead of Flutter/React Native/Xamarin/MAUI/etc? {#faq-skip-xp}
262
214
263
215
Platform-native user interfaces provide a premium app experience, optimal performance and superior battery life. Skip facilitates the creation of apps using each platform's vendor-recommended design language: Swift and SwiftUI for iOS, and Kotlin and Jetpack Compose for Android.
264
216
265
-
### Can I develop an app that only supports Android or iOS?
266
-
{: #faq-xor}
217
+
### Can I develop an app that only supports Android or iOS? {#faq-xor}
267
218
268
219
No, distributing an app through the App Fair requires that it support both iOS and Android. There may be different features that are enabled for different platforms as a consequence of each platform's unique feature-set, but in general the app should aim to provide the same experience on both of the major mobile operating systems.
269
220
270
-
### Can I build an App Fair app for macOS/Windows/Linux?
271
-
{: #faq-desktop}
221
+
### Can I build an App Fair app for macOS/Windows/Linux? {#faq-desktop}
272
222
273
223
No. App Fair apps are squarely focused on native mobile devices.
274
224
275
-
### Can I build an App Fair app for the web?
276
-
{: #faq-web}
225
+
### Can I build an App Fair app for the web? {#faq-web}
277
226
278
227
No. App Fair apps are squarely focused on native mobile devices.
279
228
280
-
### Can I develop an App Fair app on Linux or Windows?
281
-
{: #faq-dev-lin-win}
229
+
### Can I develop an App Fair app on Linux or Windows? {#faq-dev-lin-win}
282
230
283
231
Not at this time. Even though Android apps can be developed on any of macOS, Linux, or Windows, building and testing iOS apps requires Xcode and the tools that come with it (i.e., the iOS Simulator), which requires macOS.
284
232
285
-
### What are the minimum system requirements for running App Fair apps
286
-
{: #faq-sysreq}
233
+
### What are the minimum system requirements for running App Fair apps {#faq-sysreq}
287
234
288
235
In order to install and run an App Fair App, a device must be running either iOS 17 or Android 10 (or higher). Individual apps may add higher system requirements, but it is generally not recommended in order to reach the widest possible audience.
289
236
290
-
### Can an app have different features for different distribution channels?
291
-
{: #faq-heterogeneous-features}
237
+
### Can an app have different features for different distribution channels? {#faq-heterogeneous-features}
292
238
293
239
Yes. An app can check at runtime whether it has been installed from the App Fair versus one of the commercial app stores, and choose the enable or disable features accordingly.
294
240
295
-
### How can I remove my app from one of the the App Fair distribution channels?
296
-
{: #faq-leave-distribution-channel}
241
+
### How can I remove my app from one of the the App Fair distribution channels? {#faq-leave-distribution-channel}
297
242
298
-
### Can I leave the App Fair completely and distribute my app independently?
299
-
{: #faq-leave-app-fair}
243
+
### Can I leave the App Fair completely and distribute my app independently? {#faq-leave-app-fair}
300
244
301
-
### Why does fairapps need write access to my project?
302
-
{: #faq-write-access}
245
+
### Why does fairapps need write access to my project? {#faq-write-access}
303
246
304
247
The App Fair build process builds and signs your apps, but the actual binaries are still distributed through your own repository. As such, the App Fair needs the ability to add files to your app repository's releases, which requires write access to your repository.
305
248
306
-
### Can I build my own app binary instead of having the App Fair do it?
307
-
{: #faq-trusted-builds}
249
+
### Can I build my own app binary instead of having the App Fair do it? {#faq-trusted-builds}
308
250
309
251
Yes. When you tag your repository with a semantic version, your app is automatically built and binaries for iOS (.ipa) and Android (.apk and .adb) are uploaded to the repository's releases page. These will be *unsigned* binaries, and so you will need to manage the signing process yourself if you aim to release the app through other channels.
310
252
311
-
### What if I can no longer maintain my app?
312
-
{: #faq-maintenance-exit}
253
+
### What if I can no longer maintain my app? {#faq-maintenance-exit}
313
254
314
255
You can post a Call for Maintenance (CFM) on the App Fair discussion forums, and then if there is interest, you will arrange to hand over future development to a new individual or group. This is one of the reasons why App Fair apps require that each app is hosted in its own dedicated organization: it facilitates the ability for app development and maintenance to be handed off to another party in the even that the original developer(s) can no longer maintain it.
315
256
316
-
### I am not a developer, but I would like to translate an app into another language. How can I help?
317
-
{: #faq-translators}
257
+
### I am not a developer, but I would like to translate an app into another language. How can I help? {#faq-translators}
318
258
319
259
_writing in progress…_
320
260
321
-
### I am not a developer. How else can I help the App Fair Project?
322
-
{: #faq-other-contributions}
323
-
261
+
### I am not a developer. How else can I help the App Fair Project? {#faq-other-contributions}
324
262
The App Fair Project is run solely on donations from users like you. Please consider making a contribution to the ongoing development and hosting fees by going to [appfair.org/donate/](https://appfair.org/donate/).
0 commit comments