Какие языки программирования используются для разработки нативных приложений под разные платформы?

«Какие языки программирования используются для разработки нативных приложений под разные платформы?» — вопрос из категории Мобильное тестирование, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Для нативной разработки используются языки и инструменты, предоставляемые и рекомендуемые владельцем платформы (Apple, Google, Microsoft). Это гарантирует полную совместимость, высокую производительность и доступ ко всем функциям устройства.

Основные языки по платформам:

Платформа Основной язык (рекомендуемый) Альтернативный / Legacy язык Ключевые фреймворки
iOS / iPadOS / macOS Swift (современный, безопасный, высокопроизводительный) Objective-C (для поддержки старых проектов) UIKit, SwiftUI
Android Kotlin (официально рекомендован Google с 2019 г.) Java (традиционный, огромная кодовая база) Android SDK, Jetpack (AndroidX)
Windows C# (основной для прикладного ПО) C++ (для системного ПО, игр, драйверов) .NET, UWP, WinUI, WPF

Пример: Базовая активность на Android (Kotlin)

package com.example.myfirstapp

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button
import android.widget.Toast

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main) // Связь с XML-макетом

        // Находим кнопку по ID и вешаем обработчик клика
        val myButton: Button = findViewById(R.id.my_button)
        myButton.setOnClickListener {
            // Действие при клике
            Toast.makeText(this, "Button clicked!", Toast.LENGTH_SHORT).show()
        }
    }
}

Пример: Контроллер представления на iOS (Swift + UIKit)

import UIKit

class ViewController: UIViewController {

    @IBOutlet weak var greetingLabel: UILabel!

    override func viewDidLoad() {
        super.viewDidLoad()
        // Настройка представления после загрузки
        greetingLabel.text = "Welcome"
    }

    @IBAction func buttonTapped(_ sender: UIButton) {
        // Действие при нажатии кнопки (связь через Storyboard)
        greetingLabel.text = "Hello, iOS!"
    }
}

Почему выбор языка важен для тестирования:

  1. Инструменты автоматизации часто привязаны к языку и фреймворку:
    • iOS: XCUITest (на Swift/Objective-C), EarlGrey.
    • Android: Espresso (Kotlin/Java), UIAutomator.
  2. Понимание крэшей: Логи падения приложения (stack traces) будут содержать названия классов и методов на языке разработки. Знание Swift/Kotlin помогает быстрее локализовать проблему.
  3. Особенности платформы: Зная, что iOS использует Automatic Reference Counting (ARC), а в Kotlin/Java есть Garbage Collector, можно по-разному интерпретировать проблемы с памятью.