Mobile platform ios android

Разработка библиотеки для iOS/Android на Golang

Кроссплатформенная разработка мобильных приложений была очень популярна в свое время. Данный подход использовали большинство компаний во время становления мобильной отрасли. Основные причины задействовать кроссплатформенную разработку были просты — отсутствие профессиональных кадров на рынке, скорость и стоимость разработки. К сожалению, в большинстве случаев, данный подход не оправдал себя.

Но почему бы не дать ему второй шанс? Технологии шагнули вперед и теоретически мы можем получить очень качественный продукт. В данной статье мы рассмотрим на практике как разработать библиотеку для IOS/Android на языке Golang и посмотрим с какими ограничениями и проблемами мы столкнулись в процессе разработки.

Наша основная задача разработать SDK для сборки логов и крашей с мобильных приложений, при этом SDK должно подключаться и работать и с Android и с iOS приложениями. В тоже время библиотека должна взаимодействовать с основным сервисом LogPacker, который агрегирует и анализирует данные.

Мы решили использовать новые возможности языка Go для создания кроссплатформенной библиотеки. Во-первых, наше основное приложение написано на Go, и для нас было проще использовать данный язык и не привлекать Java/Objective-C разработчиков. Во-вторых, мы сэкономили время на разработку и попробовали старый подход с новыми возможностями.

Что такое gomobile?

Проект gomobile предоставляет разработчикам инструменты для сборки кода под мобильные платформы Android и iOS.

Сейчас существуют два способа интеграции Go в мобильную среду:

  • Написание полноценного Go-приложения без UI.
  • Генерация Java/Objective-C/Swift кода из Go.

Данная функция поддерживается начиная с Golang версии 1.5. Новая утилита gomobile помогает компилировать Go в мобильные приложения или собирать Java/Objective-C/Swift код.

Для начала выберем один из способов реализации. Первый способ нам не подходит из-за постановки задачи — нам нужна небольшая библиотека, а не отдельное приложение. Хотя способ очень интересный и перспективный благодаря скорости работы go приложений и минимизации потребления ресурсов мобильных устройств.
Мы выберем второй способ, и cгенерируем Java/Objective-C/Swift код из Go.

Настройка окружения

Для начала подготовим окружение для разработки. Нам нужен Go версии 1.5 или выше (чем выше — тем лучше, Go-сообщество вносит постоянные улучшения в Go Mobile).

Далее устанавливаем утилиту gomobile и библиотеку Android SDK. Начнем с установки gomobile:

Примечание: На OS X необходимо иметь установленный Xcode Command Line Tools.

Далее инициализируем gomobile, это может быть сделано один раз в любой рабочей директории:

Примечание: эта команда может занять несколько минут.

Для сборки Java-кода нам необходим Android SDK и установленная Java (OpenJDK достаточно).

Скачаем и распакуем Android SDK в домашнюю директорию, например

/android-sdk, и выполним следующую команду для установки API версий:

Далее установите переменную окружающей среды:

Окружение для разработки и сборки библиотеки готово. Перейдем непосредственно к написанию кода, и посмотрим с какими ограничениями мы столкнулись.

Общий Go-код для Android и iOS

Один и тот же код может быть использован для дальнейшей компиляции под Android и iOS. Написание такого кроссплатформенного Go-кода имеет свои ограничения. В настоящее время мы можем использовать только некоторый набор типов данных. Разрабатывая приложение на Go, это необходимо учитывать. Рассмотрим более подробно поддерживаемые типы:

  • int и float;
  • string и boolean;
  • byte[]. Текущая реализация не позволяет использовать []byte в качестве аргумента функции (https://golang.org/issues/12113);
  • функция должна возвращать только поддерживаемые типы, может не возвращать результат, возвращать один тип или два типа, при том, что второй тип должен быть обязательно error;
  • интерфейсы могут быть использованы, если при экспорте они будут использовать поддерживаемый тип;
  • тип struct, только когда все поля соответствуют ограничениям.
Читайте также:  Android блокирует уведомления этой категории входящие вызовы xiaomi redmi go

Поэтому если тип не поддерживается командой gomobile bind, вы увидите подобную ошибку:

Бесспорно набор поддерживаемых типов сильно ограничен, но для реализации нашего SDK этого вполне достаточно.

Сборка и импорт в Java/Objective-C/Swift

Gobind генерирует эквивалентный Go-коду код Java, Objective-C или Swift. К сожалению, gomobile не работает для Windows Phone и это нужно учитывать на этапе планирования.

Обычно gobind не используется напрямую, вместо этого код генерируется автоматически и оборачивается в пакет командой `gomobile bind`. Более подробно это описано тут golang.org/x/mobile/cmd/gomobile.

Рассмотрим некоторые команды и особенности процесса компиляции для каждой платформы.

Начнем с флага -target, который определяет платформу для генерации. Пример для Android:

Эта команда сгенерирует из текущего кода .aar файл. Импортировать данный файл в Android Studio очень просто:

  • File > New > New Module > Import .JAR or .AAR package
  • File > Project Structure > app -> Dependencies -> Add Module Dependency
  • Добавить импорт: import go.logpackermobilesdk.Logpackermobilesdk

Примечание: В Java название пакета для импорта всегда начинается с go.

Похожая команда используется для сборки Objective-C/Swift кода:

Будет создана папка .framework в текущей директории.

Это работает как для Objective-C так и для Swift. Переместите .framework папку в файловый браузер Xcode и добавьте импорт в проект:

Примечание: Go позволяет создавать не только SDK, но и компилировать само приложение в apk/ipa файлы из main.go файла, правда без поддержки нативного мобильного UI. Бесспорно это является очень интересным экспериментом Go-сообщества.

Использование подключенных пакетов

Gomobile bind автоматически создает функции getSomething(), setSomething(). Также все экспортируемые функции будут доступны публично.

Для примера использование нашей библиотеки в Android Studio:

Она же для Objective-C:

Как видно из примеров выше, в итоге мы получили стандартные библиотеки. Конфигурация библиотек в приложении предельна проста и знакома разработчикам.

Заключение

Все понимают, что создание отдельных команд для разработки под каждую мобильную платформу — это не самое простое и дешевое удовольствие. Но для создания качественного продукта это необходимо на данном этапе времени. С другой стороны, нашу небольшую задачу мы смогли выполнить в рамках кроссплатформенной разработки и воспользовались всеми ее плюсами:

  • Минимальные ресурсы на разработку.
  • Скорость разработки.
  • Простая поддержка решения в дальнейшем.

Минусом является то, что мы не смогли собрать библиотеку под Windows Phone, но об этом мы знали заранее.
Мы надеемся, что в скором времени появится простой способ написания полноценных приложений и SDK на языке Golang.

Вы можете ознакомиться с нашими наработками, склонировав наш репозиторий.

Источник

7 Best Frameworks & Libraries for Cross-Platform Android and iOS Apps in 2021

Hello guys, there is a huge demand for developers with knowledge of cross-platform mobile app development frameworks like Flutter and React Native. This is obvious as no one wants to maintain a separate code base for their Android and iOS mobile app.

Having a separate code base is a maintenance nightmare because you have to work twice to put a bug fix or feature into each of your codebases.

Thankfully, Flutter and React Native solve its problem by allowing you to create a native-looking mobile application for both Android and iOS devices using the same code based.

Читайте также:  Ферма джейн для андроид

While Flutter and React Native are definitely the leading cross-platform mobile app development framework, they are not the only ones as you also have frameworks like Ionic, Xamarin, and Native Script which you will learn in this article.

5 Best Frameworks to build Cross-Platform Mobile apps

Without wasting any more of your time, let’s dive into the best framework to build cross-platform mobile apps. We’ll also look at the pros and cons of each framework and which you can use based upon your strength. I will also mention relevant courses along the way for further learning.

1. Flutter

This is an excellent framework for developing cross-platform native mobile applications in 2021. Like Golang, TensorFlow, and Angular, Flutter is also from Google, which uses Dart (another programming language from Google) and provides SDK for developing a cross-platform native mobile application.

It’s always been challenging to release your app to different platforms like Android, iOS, and Windows Mobile, as you need to maintain a separate codebase. Flutter solves that problem by allowing you to create mobile apps for both iOS and Android devices using the same codebase.

Flutter has seen a lot of growth in the last 2 years, and it’s now the #1 framework for developing native mobile apps. If you have already decided to learn Flutter and looking for a resource, then I suggest you check out this Flutter & Dart — The Complete Guide [2021 Edition] by Maximilian of Acadmind on Udemy, one of my favorite courses to learn Flutter in 2021.

2. React Native

Apart from Flutter, if there is another framework you can check out for developing native cross-platform mobile apps, then they React Native. It uses React and JavaScript for producing high quality native mobile apps.

It’s the right choice for all web developers who wants to become a mobile app developer and already familiar with technologies like JavaScript and React. If you are one of them, then I suggest you learn React Native in 2021.

Also, there are a lot of resources to learn React Native, both free and paid, but if you ask my recommendation, I highly recommend you check out Stephen Grider’s The Complete React Native + Hooks course, one of my favorite resources to learn React Native online. Stephen is one of the best instructors of Udemy and his teaching style is really great

3. Cordova

Apache Cordova is another mobile application development framework originally created by Nitobi. Adobe Systems purchased Nitobi in 2011, rebranded it as PhoneGap, and later released an open-source version of the software called Apache Cordova.

It allows you to use standard web technologies — HTML5, CSS3, and JavaScript for cross-platform development, and one is of the hot technologies to learn in 2021.

If you’d like to learn Cordova in 2021, then please check out Build iOS & Android Apps with Angular and Cordova, one of the exciting courses for learning Cordova.

4. Xamarin

Xamarin is a way to make mobile apps quickly for all platforms with a single, shared C# codebase, build a custom native user interface for each platform, or use Xamarin.Forms to write a single shared user interface across platforms.

Читайте также:  Android как убрать иконку с рабочего стола

It’s owned by Microsoft and quickly becoming popular for creating mobile apps for C, C++, and C# developers.

If you already know one of the C languages and you’re looking for a career in mobile app development, then I strongly suggest you learn Xamarin in 2021, and The Complete Xamarin Developer Course: iOS And Android! is a good course to start with.

5. Firebase

Firebase is not exactly a cross-platform framework for developing mobile apps but a useful framework for building backend. It’s actually Google’s mobile platform that helps you quickly develop high-quality mobile apps and grow your business. You can choose Firebase as a backend for your Android or iOS application.

If you are looking to move into the lucrative business of mobile application development in 2021, then learning Firebase is a very good idea, and Advanced iOS and Firebase: Rideshare is a good place to start.

6. Native Script

If somehow you didn’t like React Native and Flutter and looking for alternatives, then you can also check out Native Script. NativeScript is a free and open-source framework to develop a mobile application for both Apple iOS and Google’s Android platform.

It allows you to build native mobile apps in both TypeScript and JavaScript and using Angular and Vuejs. If you are a frontend developer and already know frameworks like Angular or Vuejs, then Native Script can be the right choice for you.

NativeScript features deep integration with both Angular and Vuejs and allows you to write code on any language, which translates into JAvaScript like TypeScript or CoffeeScript.

If you need resources, I suggest you check out this Native Script + Angular: Build Native iOS and Android Apps course by Maximilian Schwarzmuller on Udemy.

7. Ionic

This is another framework for developing hybrid mobile applications using JavaScript. Ionic also allows you to build cross-platform mobile apps, which means you can create an application for any platform using one codebase.

Ionic Framework is a free and open-source and provides a portable UI toolkit for developing high-quality cross-platforms apps for native iOS, Android, and the web- all from the single codebase. It also has an Ionic React that leverages React for building hybrid mobile apps.

If you want to learn Ionic in 2021, then I suggest you check out this Ionic 4 MasterClass course on Udemy. It’s created by none other than Maximilian Schwarzmuller, one of the best instructors on Udemy and Youtube.

That’s all about some of the best frameworks you can learn for cross-platform mobile app development. You don’t need to learn them all, choose the one which suits your needs.

For example, if you already know JavaScript and React.js then React Native is the best framework for you but if you are coming from Dart background or don’t mind learning a new programming language like Dart then Flutter is a great choice.

Similarly for developers with C.C#, and C++ background can use the Xamarin framework for building cross-platform mobile apps.

Thanks for reading this article so far. If you like this article useful and find these technologies worth learning for mobile app development, then please share it with your friends and colleagues. If you have any questions or feedback, then please drop a note.

Источник

Оцените статью