Google, Siyah topluluklar için ırksal eşitliği ilerletmeye kararlıdır. Nasıl olduğunu gör.
Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

İOS için Game Loop testlerini kullanmaya başlayın

Game Loop testleri ile oyun motorunuza özgü testler yazabilir ve daha sonra seçtiğiniz cihazlarda Test Laboratuarı'nda çalıştırabilirsiniz. Bu şekilde, farklı kullanıcı arayüzü veya test çerçeveleri için yazma konusunda endişelenmenize gerek yoktur. Oyun Döngüsü testi, gerçek bir oyuncunun eylemlerini simüle eder ve Test Laboratuarı'nda çalıştırdığınızda, oyununuzun kullanıcılarınız için iyi performans gösterdiğini doğrulamak için hızlı ve ölçeklenebilir bir yol sağlar.

Bu sayfa, bir Game Loop testinin nasıl çalıştırılacağını, ardından Firebase konsolunun Test Laboratuarı'nda test sonuçlarınızı nasıl görüntüleyeceğinizi ve yöneteceğinizi gösterir. Ayrıca, testlerinizi özel test sonuçları yazma veya testinizi erkenden sona erdirme gibi isteğe bağlı özelliklerle daha da özelleştirebilirsiniz.

Oyun Döngüsü Testi nedir?

Döngü, oyun uygulamanızda testinizin tam veya kısmi olarak gerçekleştirilmesidir. Game Loop testini yerel olarak bir simülatörde veya Test Laboratuarı'ndaki bir dizi cihazda çalıştırabilirsiniz. Game Loop testleri aşağıdakiler için kullanılabilir:

  • Oyununuzu, son kullanıcının oynadığı gibi çalıştırın. Kullanıcının girişini kodlayabilir, kullanıcının boşta olmasına izin verebilir veya kullanıcıyı bir AI ile değiştirebilirsiniz (örneğin, bir araba yarışı oyununda AI uyguladıysanız, kullanıcının girişinden sorumlu bir AI sürücüsü koyabilirsiniz) .

  • Hangi cihazların destekleyebileceğini bulmak için oyununuzu en yüksek kalitede ayarlayın.

  • Birden fazla gölgelendiriciyi derleme, yürütme ve çıktının beklendiği gibi olup olmadığını denetleme gibi teknik bir test gerçekleştirin.

1. Adım: Test Laboratuvarı'nın özel URL düzenini kaydedin

İlk olarak, Firebase Test Lab'ın özel URL şemasını uygulamanıza kaydetmelisiniz:

  1. Xcode'da bir proje hedefi seçin.

  2. Bilgi sekmesini tıklayın, ardından yeni bir URL türü ekleyin.

  3. URL Şemaları alanına firebase-game-loop girin. Özel URL şemasını <dict> etiketinin herhangi bir yerine projenizin Info.plist yapılandırma dosyasına ekleyerek de kaydedebilirsiniz:

     <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>
     

Uygulamanız artık Test Lab'ı kullanarak bir test yapacak şekilde yapılandırıldı.

2. Adım (isteğe bağlı): Uygulamanızı birden çok döngü çalıştıracak şekilde yapılandırın

Uygulamanızda kayıtlı birden fazla özel URL şeması varsa ve testinizde birden çok döngü (aka senaryolar) çalıştırmayı planlıyorsanız, başlatma zamanında uygulamanızda hangi döngüleri çalıştırmak istediğinizi belirtmeniz gerekir.

Uygulama temsilcinizde uygulamayı geçersiz kılın application(_:open:options:) yöntemi:

hızlı

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 <UIApplicationOpenURLOptionsKey, id> *)options { if ([url.scheme isEqualToString:(@"firebase-game-loop")]) { // ...Enter Game Loop Test logic to override application(_:open:options:). } }

Testinizde birden çok döngü çalıştırdığınızda, geçerli döngü, uygulamayı başlatmak için kullanılan URL'ye bir parametre olarak iletilir. Özel URL şemasını getirmek için kullanılan URLComponents nesnesini ayrıştırarak geçerli döngü numarasını da alabilirsiniz:

hızlı

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).
      }
  }
}

3. Adım: Test oluşturma ve çalıştırma

Test Lab'ın özel URL düzenini kaydettikten sonra, testinizi Firebase konsolunda veya gcloud beta CLI ile çalıştırabilirsiniz . Henüz yapmadıysanız, uygulamanız için bir IPA dosyası oluşturun (daha sonra bulmanız gerekir).

Firebase konsolunda bir test çalıştırın

  1. Henüz yapmadıysanız, Firebase konsolunu açın ve bir proje oluşturun.

  2. Firebase konsolunun Test Laboratuarı sayfasında İlk Testinizi Çalıştır> Bir iOS Oyun Döngüsü Çalıştır'ı tıklatın.

  3. Uygulamayı Yükle bölümünde Gözat'ı tıklayın, ardından uygulamanızın IPA dosyasını seçin (henüz yapmadıysanız uygulamanız için bir IPA dosyası oluşturun ).

  4. İsteğe bağlı : Bir kerede birden çok döngü (aka senaryolar) çalıştırmak veya çalıştırmak için belirli döngüler seçmek istiyorsanız, Senaryolar alanına döngü numaralarını girin.

    Örneğin, "1-3, 5" girdiğinizde, Test Laboratuvarı 1, 2, 3 ve 5 döngülerini çalıştırır. Varsayılan olarak ( Senaryolar alanına hiçbir şey girmezseniz), Test Laboratuvarı yalnızca döngü 1'i çalıştırır.

  5. Cihazlar bölümünde, uygulamanızı test etmek istediğiniz bir veya daha fazla fiziksel cihazı seçin, ardından Testleri Başlat'ı tıklayın.

Gcloud beta CLI ile bir test yapın

  1. Henüz yapmadıysanız, yerel gcloud SDK ortamınızı yapılandırın, ardından gcloud beta bileşenini yüklediğinizden emin olun.

  2. gcloud beta firebase test ios run komutunu gcloud beta firebase test ios run ve çalıştırmayı yapılandırmak için aşağıdaki bayrakları kullanın:

Game Loop testleri için bayraklar
--type

Gerekli : Çalıştırmak istediğiniz iOS testi türünü belirtir. Test türlerini xctest (varsayılan) veya game-loop girebilirsiniz.

--app

Gerekli : Uygulamanızın IPA dosyasına giden mutlak yol (GCS veya dosya sistemi). Bu bayrak yalnızca Game Loop testleri yapılırken geçerlidir.

--scenario-numbers

Uygulamanızda çalıştırmak istediğiniz döngüler (aka senaryolar). Bir döngü, bir liste veya döngüler veya bir dizi döngü girebilirsiniz. Varsayılan döngü 1'dir.

Örneğin, --scenario-numbers=1-3,5 1, 2, 3 ve 5 döngülerini çalıştırır.

--device-model

Testinizi çalıştırmak istediğiniz fiziksel cihaz (hangi kullanılabilir cihazları kullanabileceğinizi bulun).

--timeout

Testinizin çalışmasını istediğiniz maksimum süre. Süreyi saniye cinsinden göstermek için bir tamsayı veya süreyi daha uzun bir zaman birimi olarak göstermek için bir tamsayı ve numaralandırma girebilirsiniz.

Örneğin:

  • --timeout=200 , testinizi 200 saniyeye kadar çalıştığında sonlandırmaya zorlar.
  • --timeout=1h , testinizi bir saate kadar çalıştığında sonlandırmaya zorlar.

Örneğin, aşağıdaki komut bir iPhone 8 Plus'ta döngü 1, 4, 6, 7 ve 8 yürüten bir Oyun Döngü testi çalıştırır:

gcloud beta firebase test ios run
 --type game-loop --app path/to/my/App.ipa --scenario-numbers 1,4,6-8
 --device-model=iphone8plus

Gcloud CLI hakkında daha fazla bilgi için başvuru belgelerine bakın .

Yerel olarak bir test yapın

Testinizi yerel olarak çalıştırmak için oyun uygulamanızı bir simülatöre yükleyin ve çalıştırın:

xcrun simctl openurl SIMULATOR_UDID firebase-game-loop://
  • Simülatörünüzün UDID'sini instruments -s devices Devices komutunu çalıştırarak bulabilirsiniz.

  • Çalışan tek bir simülatör varsa, SIMULATOR_UDID yerine "booted" özel dizesini girin.

Testiniz birden çok döngü içeriyorsa, döngü numarasını scenario bayrağına ileterek hangi döngüyü çalıştırmak istediğinizi belirleyebilirsiniz. Testinizi yerel olarak çalıştırırken aynı anda yalnızca bir döngü çalıştırabileceğinizi unutmayın. Örneğin, 1, 2 ve 5 döngülerini çalıştırmak istiyorsanız, her döngü için ayrı bir komut çalıştırmalısınız:

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

Testi erken bitir

Varsayılan olarak, bir Oyun Döngüsü testi, tüm döngüler gerçekleştirilse bile beş dakikalık bir zaman aşımına ulaşana kadar çalışmaya devam eder. Zaman aşımına ulaşıldığında test sona erer ve bekleyen döngüleri iptal eder. Uygulamanızın firebase-game-loop-complete Test Lab'ın özel URL şeması firebase-game-loop-complete arayarak testinizi hızlandırabilir veya erken bitirebilirsiniz. Örneğin:

hızlı

/// 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

  • (geçersiz) finishLoop {UIApplication * app = [UIApplication sharedApplication]; [app openURL: [NSURL URLWithString: @ "firebase-game-loop-complete: //"] seçenekler: @ {} completionHandler: ^ (BOOL başarısı) {}]; }

Game Loop testiniz geçerli döngüyü sonlandırır ve sonraki döngüyü yürütür. Çalıştırılacak başka döngü olmadığında test sona erer.

Özel test sonuçları yazma

Game Loop testinizi, cihazınızın dosya sistemine özel test sonuçları yazacak şekilde yapılandırabilirsiniz. Bu şekilde, test çalışmaya başladığında, Test Lab sonuç dosyalarını test cihazınızdaki GameLoopsResults dizininde (kendiniz oluşturmanız gerekir) saklar. Test sona erdiğinde, Test Lab tüm dosyaları GameLoopResults dizininden projenizin GameLoopResults taşır. Testinizi ayarlarken aşağıdakileri aklınızda bulundurun:

  • Dosya türüne, boyutuna veya miktarına bakılmaksızın tüm sonuç dosyaları yüklenir.

  • Test Laboratuvarı, testinizdeki tüm döngülerin çalışması bitene kadar test sonuçlarınızı işlemez; bu nedenle testinizde çıktı yazan birden çok döngü varsa, bunları bir sonuç dosyasına eklediğinizden veya her döngü için bir sonuç dosyası oluşturduğunuzdan emin olun. Bu şekilde, önceki bir döngüden sonuçların üzerine yazmaktan kaçınabilirsiniz.

Testinizi özel test sonuçları yazacak şekilde ayarlamak için:

  1. Uygulamanızın Documents dizininde GameLoopResults adlı bir dizin oluşturun.

  2. Uygulamanızın kodundaki herhangi bir yerden (örneğin, uygulama temsilciniz) aşağıdakileri ekleyin:

    hızlı

    /// 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]; } }