Ikuti semua informasi yang diumumkan di Firebase Summit, dan pelajari bagaimana Firebase dapat membantu Anda mempercepat pengembangan aplikasi dan menjalankan aplikasi dengan percaya diri. Pelajari Lebih Lanjut

Jalankan tes Game Loop

Tetap teratur dengan koleksi Simpan dan kategorikan konten berdasarkan preferensi Anda.

Mungkin sulit untuk mengotomatiskan pengujian game saat aplikasi game dibangun di kerangka kerja UI yang berbeda. Pengujian Game Loop memungkinkan Anda mengintegrasikan pengujian native dengan Test Lab dan menjalankannya dengan mudah di perangkat yang Anda pilih. Panduan ini menjelaskan cara menyiapkan pengujian Game Loop untuk dijalankan menggunakan Firebase Test Lab.

Tentang tes Game Loop

Apa itu tes Game Loop?

Pengujian Game Loop menyimulasikan tindakan pemain sungguhan untuk memverifikasi bahwa game Anda berperforma baik untuk pengguna dengan cara yang cepat dan dapat diskalakan. Loop adalah pengujian penuh atau sebagian dari pengujian Anda pada aplikasi game Anda. Anda dapat menjalankan pengujian Game Loop secara lokal di simulator atau di sekumpulan perangkat di Test Lab. Tes Game Loop dapat digunakan untuk:

  • Jalankan game Anda karena pengguna akhir akan memainkannya. Anda dapat membuat skrip input pengguna, membiarkan pengguna menganggur, atau mengganti pengguna dengan AI (misalnya, jika Anda menerapkan AI dalam game balap mobil, Anda dapat menempatkan pengemudi AI yang bertanggung jawab atas input pengguna) .
  • Jalankan game Anda pada pengaturan kualitas tertinggi untuk mengetahui perangkat mana yang dapat mendukungnya.
  • Jalankan uji teknis, seperti mengompilasi beberapa shader, menjalankannya, dan memeriksa apakah hasilnya sesuai dengan yang diharapkan.

Langkah 1 : Daftarkan skema URL kustom Test Lab

  1. Di Xcode, pilih target proyek.

  2. Klik tab Info , lalu tambahkan jenis URL baru .

  3. Di kolom Skema URL , masukkan firebase-game-loop . Anda juga dapat mendaftarkan skema URL kustom dengan menambahkannya ke file konfigurasi Info.plist proyek Anda di mana saja di dalam tag <dict> :

    <key>CFBundleURLTypes</key>
     <array>
         <dict>
             <key>CFBundleURLName</key>
             <string></string>
             <key>CFBundleTypeRole</key>
             <string>Editor</string>
             <key>CFBundleURLSchemes</key>
             <array>
                 <string>firebase-game-loop</string>
             </array>
         </dict>
     </array>
    

Aplikasi Anda sekarang dikonfigurasi untuk menjalankan pengujian menggunakan Test Lab.

Langkah 2 : Konfigurasikan aplikasi Anda secara opsional

Jalankan banyak loop

Jika Anda berencana untuk menjalankan beberapa loop (alias skenario) dalam pengujian, Anda harus menentukan loop mana yang ingin Anda jalankan di aplikasi pada waktu peluncuran.

Di delegasi aplikasi Anda, ganti metode application(_:open:options:) :

Cepat

func application(_app: UIApplication,
                 open url: URL
                 options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
    let components = URLComponents(url: url, resolvingAgainstBaseURL: true)!
    if components.scheme == "firebase-game-loop" {
        // ...Enter Game Loop Test logic to override application(_:open:options:).
    }
    return true
}

Objective-C

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary &lt;UIApplicationOpenURLOptionsKey, id&gt; *)options {
  if ([url.scheme isEqualToString:(@"firebase-game-loop")]) {
      // ...Enter Game Loop Test logic to override application(_:open:options:).
  }
}

Saat Anda menjalankan beberapa loop dalam pengujian, loop saat ini diteruskan sebagai parameter ke URL yang digunakan untuk meluncurkan aplikasi. Anda juga bisa mendapatkan nomor loop saat ini dengan mem-parsing objek URLComponents yang digunakan untuk mengambil skema URL khusus:

Cepat

if components.scheme == "firebase-game-loop" {
    // Iterate over all parameters and find the one with the key "scenario".
    let scenarioNum = Int(components.queryItems!.first(where: { $0.name == "scenario" })!.value!)!
    // ...Write logic specific to the current loop (scenarioNum).
}

Objective-C

if ([url.scheme isEqualToString:(@"firebase-game-loop")]) {
    // Launch the app as part of a game loop.
    NSURLComponents *components = [NSURLComponents componentsWithURL:url
                                             resolvingAgainstBaseURL:YES];
    for (NSURLQueryItem *item in [components queryItems]) {
        if ([item.name isEqualToString:@"scenario"]) {
            NSInteger scenarioNum = [item.value integerValue];
            // ...Write logic specific to the current loop (scenarioNum).
        }
    }
}

Akhiri tes lebih awal

Secara default, pengujian Game Loop terus berjalan hingga mencapai batas waktu lima menit, meskipun semua loop telah dijalankan. Saat batas waktu tercapai, pengujian akan berakhir dan membatalkan loop yang tertunda. Anda dapat mempercepat pengujian atau mengakhirinya lebih awal dengan memanggil skema URL kustom Test Lab firebase-game-loop-complete di AppDelegate aplikasi Anda. Sebagai contoh:

Cepat

/// End the loop by calling our custom url scheme.
func finishLoop() {
    let url = URL(string: "firebase-game-loop-complete://")!
    UIApplication.shared.open(url)
}

Objective-C

- (void)finishLoop {
  UIApplication *app = [UIApplication sharedApplication];
  [app openURL:[NSURL URLWithString:@"firebase-game-loop-complete://"]
      options:@{}
completionHandler:^(BOOL success) {}];
}

Tes Game Loop Anda menghentikan loop saat ini dan menjalankan loop berikutnya. Ketika tidak ada lagi loop untuk dijalankan, pengujian berakhir.

Tulis hasil tes kustom

Anda dapat mengonfigurasi pengujian Game Loop untuk menulis hasil pengujian khusus ke sistem file perangkat Anda. Dengan cara ini, saat pengujian mulai berjalan, Test Lab menyimpan file hasil di direktori GameLoopsResults di perangkat pengujian Anda (yang harus Anda buat sendiri). Saat pengujian berakhir, Test Lab memindahkan semua file dari direktori GameLoopResults ke bucket proyek Anda. Ingatlah hal-hal berikut saat menyiapkan pengujian Anda:

  • Semua file hasil diunggah terlepas dari jenis, ukuran, atau jumlah file.

  • Test Lab tidak memproses hasil pengujian Anda hingga semua loop dalam pengujian Anda selesai berjalan, jadi jika pengujian Anda menyertakan beberapa loop yang menulis keluaran, pastikan Anda menambahkannya ke file hasil unik atau membuat file hasil untuk setiap loop. Dengan cara ini, Anda dapat menghindari penimpaan hasil dari perulangan sebelumnya.

Untuk menyiapkan pengujian Anda untuk menulis hasil pengujian khusus:

  1. Di direktori Documents aplikasi Anda, buat direktori bernama GameLoopResults .

  2. Dari mana saja di kode aplikasi Anda (misalnya, delegasi aplikasi Anda), tambahkan berikut ini:

    Cepat

    /// Write to a results file.
    func writeResults() {
      let text = "Greetings from game loops!"
      let fileName = "results.txt"
      let fileManager = FileManager.default
      do {
    
      let docs = try fileManager.url(for: .documentDirectory,
                                     in: .userDomainMask,
                                     appropriateFor: nil,
                                     create: true)
      let resultsDir = docs.appendingPathComponent("GameLoopResults")
      try fileManager.createDirectory(
          at: resultsDir,
          withIntermediateDirectories: true,
          attributes: nil)
      let fileURL = resultsDir.appendingPathComponent(fileName)
      try text.write(to: fileURL, atomically: false, encoding: .utf8)
      } catch {
        // ...Handle error writing to file.
      }
    }
    

    Objective-C

    /// Write to a results file.
    - (void)writeResults:(NSString *)message {
        // Locate and create the results directory (if it doesn't exist already).
        NSFileManager *manager = [NSFileManager defaultManager];
        NSURL* url = [[manager URLsForDirectory:NSDocumentDirectory
                                      inDomains:NSUserDomainMask] lastObject];
        NSURL* resultsDir = [url URLByAppendingPathComponent:@"GameLoopResults"
                                                 isDirectory:YES];
        [manager createDirectoryAtURL:resultsDir
          withIntermediateDirectories:NO
                           attributes:nil
                                error:nil];
    
        // Write the result message to a text file.
        NSURL* resultFile = [resultsDir URLByAppendingPathComponent:@"result.txt"];
        if ([manager fileExistsAtPath:[resultFile path]]) {
            // Append to the existing file
            NSFileHandle *handle = [NSFileHandle fileHandleForWritingToURL:resultFile
                                                                     error:nil];
            [handle seekToEndOfFile];
            [handle writeData:[message dataUsingEncoding:NSUTF8StringEncoding]];
            [handle closeFile];
        } else {
            // Create and write to the file.
            [message writeToURL:resultFile
                     atomically:NO
                       encoding:NSUTF8StringEncoding error:nil];
        }
    }
    

Langkah 3 : Kemas aplikasi Anda untuk diunggah

Terakhir, buat file IPA untuk aplikasi Anda (Anda harus menemukannya nanti).

  1. Di Xcode, pilih profil penyediaan untuk aplikasi target.

  2. Dari menu drop-down yang muncul, klik Product > Archive . Pilih arsip terbaru, lalu klik Distribusikan Aplikasi .

  3. Di jendela yang muncul, klik Pengembangan > Berikutnya .

  4. Opsional: Untuk mendapatkan build yang lebih cepat, batalkan pilihan opsi Rebuild from Bitcode , lalu klik Next . Test Lab tidak memerlukan penipisan atau pembangunan kembali aplikasi Anda untuk menjalankan pengujian sehingga Anda dapat menonaktifkan opsi ini dengan aman.

  5. Klik Export , lalu masuk ke direktori tempat Anda ingin mengunduh file IPA aplikasi Anda.

Langkah 4 : Jalankan pengujian Anda secara lokal

Anda dapat menjalankan pengujian secara lokal untuk memeriksa perilakunya sebelum menjalankannya dengan Test Lab. Untuk menguji secara lokal, muat aplikasi game Anda di simulator dan jalankan:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Anda dapat menemukan UDID simulator Anda dengan menjalankan perintah instruments -s devices .

  • Jika hanya ada satu simulator yang berjalan, masukkan string khusus "booted" sebagai pengganti SIMULATOR_UDID .

Jika pengujian Anda berisi banyak loop, Anda dapat menentukan loop mana yang ingin Anda jalankan dengan meneruskan nomor loop ke flag scenario . Perhatikan bahwa Anda hanya dapat menjalankan satu putaran pada satu waktu saat menjalankan pengujian secara lokal. Misalnya, jika Anda ingin menjalankan loop 1, 2, dan 5, Anda harus menjalankan perintah terpisah untuk setiap loop:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=1
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=2
xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://?scenario=5

Langkah selanjutnya

Jalankan pengujian Anda menggunakan Firebase console atau gcloud CLI .