Five of the biggest challenges you will encounter in multi-platform development are:
- to keep APIs coherent across all language domains and platforms,
- to propagate changes in APIs to all language domains and platforms coherently,
- to reduce the latency between specification and implementation a minimum,
- that APIs are well documented for and specific to all language domains, and,
- that APIs enforce the desired behaviour from the implementation as much as possible.
There are obviously more challenges but one that clearly deserves specific mention is the rate of change of platform specific APIs – not to mention language syntax changes! We ❤️ Swift.
To work mitigate these challenges to the maximum extent possible, we chose a nice, stable and tool-rich language – Java – to define and document the APIs that our platforms must support (that's this project) and, instead of embarking on the task of implementing those APIs in different languages and platforms by hand, we created a code generator to implement > 90% of the code for us. Our generator converts the Java API code defined in this project to the different languages our platforms must support along with the conversion of documentation tags for those languages. The general workflow is as follows:
- API specifications are agreed, implemented and documented in the Java language.
- The new API specification is tagged with a new version.
- API specifications are pushed to this repository.
- The API specifications go through CI and on passing, the generator is notified.
- The Generator is executed on the API specifications.
- TypeScript code and documentation is generated for hybrid-app HTML5 applications.
- TypeScript code is compiled to JavaScript/ECMAScript 5.
- Swift code and documentation is generated for iOS and OS X platforms.
- Java code and documentation is generated for Android mobile, wear and tv platforms.
- C# code and documentation is generated for Windows 10 platforms.
- Etc...
- After generation, each platform repo contains skeleton classes with stub-methods to be implemented.
- On completing, the platform repo is tagged with the same version as the API specification.
Hybrid apps are applications that are built using HTML5/CSS3/JavaScript web technologies and use a native "containers" to package the app to enable access to the native functionalities of a device. In essence, you can write a rich mobile/wearable/tv application using HTML and JavaScript and package that application as a native app for multiple mobile/wearable/tv platforms and distribute them on the different app stores and markets.
The Adaptive Runtime Platform (ARP) provides these native "containers" to package apps for the main mobile, wearable and desktop platforms... and other platforms as they emerge. Adaptive Runtime Platform (ARP) and sub-projects are open-source under the Apache License, Version 2.0. The Adaptive Runtime Platform (ARP) project was created by Carlos Lozano Diez as part of the adaptive.me set of products.
Please refer to the project site for more information.
- If you're amending or proposing APIs, open an issue here with a detailed description. Also, in addition to opening the issue you send me a pull request with your amendment/proposal.
- If you're seeking help, head over to StackOverflow to ask your question and tag it as adaptiveme - I might not see the question if you don't tag it.
We'd love to accept your patches and contributions to this project. There are a just a few small guidelines you need to follow to ensure that you and/or your company and our project are safeguarded from inadvertent copyright infringement. I know, this can be a pain but we want fair-play from the very start so that we're all on the same page. Please refer to the project site for more information.
- Adaptive Runtime Platform (ARP) artwork by Jennifer Lasso.
- Project badge artwork by shields.io.
- All other logos are copyright of their respective owners.
All the source code of the Adaptive Runtime Platform (ARP), including all Adaptive Runtime Platform (ARP) sub-projects curated by Carlos Lozano Diez, are distributed, and must be contributed to, under the terms of the Apache License, Version 2.0. The license is included in this repository.
Forged with ❤️ in Barcelona, Catalonia · © 2013 - 2015 adaptive.me / Carlos Lozano Diez.