iOS derleme mekanizması

Bu kılavuzda, uygulamalarınızın nasıl yapılacağı ve tüm derleme yapılandırmaları için daha hızlı derlemeler için kullanılabilecek yöntemlerin nasıl kullanılacağı ele alındı.

Harika uygulamalar geliştirilirken, yalnızca sorunsuz kod yazandan daha fazla. İyi yazılmış bir uygulama, daha küçük ve daha hızlı çalışan uygulamalarla daha hızlı derlemeler gerçekleştiren iyileştirmeler içermelidir. Bu iyileştirmeler yalnızca Kullanıcı için daha iyi bir deneyim elde etmez, aynı zamanda sizin veya proje üzerinde çalışan herhangi bir geliştirici için de geçerlidir. Her şeyi uygulamayla ilgilenirken her şey için zaman aşımına uğradığından emin olmak önemlidir.

Varsayılan seçeneklerin güvenli ve hızlı olduğunu, ancak her durum için en uygun olduğunu unutmayın. Ayrıca, birçok seçenek, tek tek projeye bağlı olarak, geliştirme döngüsünü yavaşlatabilir veya hızlandıramaz. Örneğin, yerel işlem zaman alır, ancak çok az boyut kazanılamazsa, daha hızlı bir dağıtım tarafından kurtarılmaz. Öte yandan, yerel işlem uygulamayı önemli ölçüde daraltabilir, bu durumda dağıtım daha hızlı olur. Bu, projeler arasında farklılık gösterir ve bilmemiz için tek yoldur.

Xamarin derleme hızları, performansı etkileyebilecek bir bilgisayarın çeşitli kapasitelerine ve yetilerine göre de etkilenebilir: işlemci özellikleri, veri yolu hızları, fiziksel bellek miktarı, disk hızı, ağ hızı. Bu performans sınırlamaları, bu belgenin kapsamı dışındadır ve geliştiricinin sorumluluğundadır.

Zamanlama uygulamaları

Mac için Visual Studio içinde tanılama MSBuild çıkışını etkinleştirmek için:

  1. Mac için Visual Studio tercihleri ' ne tıklayın ...
  2. Sol ağaç görünümünde projeler Oluştur ' u seçin.
  3. Sağ bölmede, günlük ayrıntı düzeyi açılan ayarını Tanılamaolarak ayarlayın: günlük ayrıntı düzeyini ayarlama
  4. Tamam 'a tıklayın
  5. Mac için Visual Studio yeniden başlat
  6. Paketinizi Temizleme ve yeniden oluşturma
  7. >Derleme çıkışı düğmesine tıklayarak hata defteri içinde tanılama çıkışını görüntüleme (Pad > hatalarını görüntüleme)

Zamanlama mtouch

mtouch yapı işlemine özgü bilgileri göstermek için --time --time--time --timemtouch bağımsız değişkenlerine geçirin. Sonuçlar, görevi arayarak derleme çıkışında bulunur MTouch :

Setup: 36 ms
Resolve References: 982 ms
Extracted native link info: 987 ms
...
Total time: 1554 ms

yapı konağından Visual Studio bağlama

Xamarin araçları teknik olarak, OS X 10,10 Yosemite veya üstünü çalıştıran herhangi bir Mac üzerinde çalışır. Bununla birlikte, geliştirici deneyimleri ve derleme süreleri Mac performansına göre ücretlenebilir.

bağlantısı kesik durumda, Windows Visual Studio yalnızca C# derleme aşamasını gerçekleştirir ve bağlama veya AOT derlemesini gerçekleştirmeye çalışmaz, uygulamayı bir . app paketine paketleyip uygulama paketini imzalamaz. (C# derleme aşaması nadiren bir performans sorunu oluşturuyor.) Mac için Visual Studio içindeki Mac derleme konağında doğrudan derleme yaparak derlemeyi yavaşlattığı, işlem hattının nerede olduğunu saptamak için girişimde bulunuldu.

ayrıca, yavaş bir şekilde daha yaygın yerlerden biri, Windows makine ile Mac derleme konağı arasındaki ağ bağlantısıdır. Bunun nedeni, ağdaki fiziksel bir engel olabilir, kablosuz bir bağlantı kullanılarak veya doygun bir makine (örneğin, bir Mac-ın-ın-The-The-in-the-the-Cloud Service) ile gezinmelidir.

Simülatör püf noktaları

Mobil uygulamalar geliştirirken, kodu hızla dağıtmak önemlidir. Yazılım sağlama gereksinimlerinin hızı ve olmaması gibi çeşitli nedenlerle geliştiriciler, genellikle önceden yüklenmiş bir simülatör 'e veya öykünücüsüne dağıtmayı seçer. Geliştirici araçları üreticileri için, bir simülatör veya öykünücü sağlama kararı hız ve uyumluluk arasında bir denge altına alınır.

Apple, kod çalıştırmaya yönelik daha az kısıtlayıcı bir ortam oluşturarak, iOS geliştirmesi için bir Benzetici sağlar. Bu daha az kısıtlayıcı ortam, Xamarin 'in Benzetici için tam zamanında (JıT) derleyicisini (bir cihazdaki AOT 'nin aksine) kullanmasına izin verir. Bu, derleme çalışma zamanında yerel koda derlenmekte olduğu anlamına gelir. Mac bir cihazdan çok daha hızlı olduğundan bu, daha iyi performans sağlar.

Simülatör, bir paylaşılan uygulama başlatıcısı kullanır ve bu, her seferinde derlenme aksine, bu, cihazda gerekli olduğu gibi, başlatıcının yeniden kullanılmasını sağlar.

Yukarıdaki bilgileri hesaba katmaktan aşağıdaki liste, en iyi performansı sağlamak için uygulamanızı derleme ve simülatör üzerinde dağıtma sırasında gerçekleştirilecek adımlar hakkında bazı bilgiler verir.

İpuçları

  • Derlemeler için:
    • Project seçeneklerinde PNG görüntülerini iyileştirme seçeneğini de seçin. Bu iyileştirme, simülatör üzerinde derlemeler için gerekli değildir.
    • Bağlantı yokolarak bağlayıcı ayarlayın. Yürütme işlemi önemli miktarda zaman aldığı için bağlayıcının devre dışı bırakılması daha hızlıdır.
    • Bayrağı kullanarak paylaşılan uygulama başlatıcısı devre dışı bırakıldığında, --nofastsim Benzetici derlemeleri çok daha yavaş olur. Artık gerekli olmadığında bu bayrağı kaldırın.
    • Paylaşılan sılauncher ana yürütülebilir dosyası bu gibi durumlarda yeniden kullanılamadığından ve uygulamaya özel yürütülebilir dosyanın her derleme için derlenmesi gerektiğinden yerel kitaplıkları kullanmak daha yavaştır.
  • Dağıtım için
    • Mümkün olduğunda her zaman simülatörünü çalışır durumda tutun. Simülatörü başlatmak 12 saniyeye kadar sürebilir.
  • ek İpuçları
    • Derlemeden önce yeniden oluşturma işlemini temizduğundan, derlemeyi yeniden oluşturmayı tercih edin. Kullanılabilecek başvuruları kaldırdığı için Temizleme uzun zaman alabilir.
    • Simülatör 'ın korumalı alanı zorunlu kılmaz özelliğinden yararlanın. Projenizde video veya diğer varlıklar gibi büyük kaynakların olması, uygulama simülatörde her başlatıldığında maliyetli dosya kopyalama işlemleri oluşturabilir. Bu dosyaları giriş dizinine yerleştirerek bu maliyetli işlemleri önleyin ve tam dosya yolu ile uygulamanızda bunlara başvurun.
    • Şüpheli olduğunda, --time --time değişiklerinizi ölçmek için bayrağını kullanın

Aşağıdaki ekran görüntüsünde, iOS seçeneklerinizde simülatör için bu seçeneklerin nasıl ayarlanacağı gösterilmektedir:

ekran görüntüsü bağlayıcı davranışı, ek mtouch bağımsız değişkenleri ve P N G görüntülerini iyileştirmek dahil Project seçeneklerini gösterir.

Cihaz püf noktaları

Simülatör, iOS cihazı için kullanılan yapılandırmanın küçük bir alt kümesi olduğu için cihaza dağıtım simülatmaya benzer. Cihaza yönelik derleme daha birçok adım gerektirir, ancak uygulamanızı iyileştirmek için ek fırsatlar sağlamanın avantajına sahiptir.

Derleme Yapılandırmaları

İOS uygulamaları dağıtımında bir dizi derleme yapılandırması sağlanır. Her yapılandırmanın ne zaman ve neden iyileştirileyeceğinizi öğrenmek için her yapılandırmanın iyi bir şekilde anlaşılmasının önemli olması önemlidir.

  • Hata Ayıklama
    • Bu, bir uygulama geliştirme aşamasında olduğu sırada kullanılması gereken ana yapılandırmadır ve bu nedenle mümkün olduğunca hızlı olmalıdır.
  • Yayınla
    • Yayın yapıları kullanıcılarınıza gönderilen ve performans üzerindeki bir odak ise paradır. Yayın yapılandırmasını kullanırken, LLVM iyileştirmeli derleyicisini kullanmak ve PNG dosyalarını iyileştirmek isteyebilirsiniz.

Oluşturma ve dağıtma arasındaki ilişkiyi anlamak da önemlidir. Dağıtım zamanı, uygulama boyutunun bir işlevidir. Daha büyük bir uygulamanın dağıtılması daha uzun sürer. Uygulama boyutunu en aza indirerek dağıtım süresini azaltabilirsiniz.

Uygulama boyutunu en aza indirmek derleme süresini de azaltabilir. Bunun nedeni, uygulamadan kodun kaldırılması, kullanılmayan kodu yerel olarak derleyerek daha az zaman alır. Daha küçük nesne dosyaları daha hızlı bağlama anlamına gelir. Bu, oluşturulacak daha az sembolle daha küçük bir yürütülebilir dosya Bu nedenle, boşluk kaydetme, bağlantı SDK 'sının tüm cihaz derlemeleri için varsayılan değer olan bir Double ödeme sahiptir.

Not

Bağlantı SDK 'sı seçeneği yalnızca bağlantı çerçevesi SDK 'ları olarak görünebilir veya kullanılan IDE 'ye bağlı olarak yalnızca SDK derlemelerini bağlantı altında olabilir.

İpuçları

  • Derleme:
    • Tek bir mimarinin (ör. ARM64) oluşturulması bir FAT ikilisinden daha hızlıdır (ör. ARMv7 + ARM64)
    • Hata ayıklarken PNG dosyalarını iyileştirmemeye özen gösterin
    • Tüm derlemelerin bağlanmasını göz önünde bulundurun. Her derlemeyi iyileştirme
    • kullanarak hata ayıklama sembollerinin oluşturulmasını devre dışı --dsym=false bırakma. Ancak, bunun devre dışı bırakılmasının, kilitlenme raporlarının yalnızca uygulamayı yapan makinede simgesel hale gelenin ve uygulamanın çıkarılmış olmadığı anlamına gele bir şey olduğunu fark etmek gerekir.

Kaçınılması gereken bazı şeyler:

  • Fat Ikili Dosyalar (hata ayıklama)
  • Bağlantıcıyı devre dışı bırakma --nolink
  • Şeritlemeyi devre dışı bırakma
    • Sembol --nosymbolstrip
    • IL (sürüm) --nostrip .

Ek ipuçları

  • Simülatörde olduğu gibi Derlemeyi yeniden derlemeyi tercih et
    • AOT'd derlemeleri (nesne dosyaları) önbelleğe alınmış
  • Dsymutil'in çalıştırılma ve cihaza yüklemenin daha uzun, daha uzun bir süreye sahip olması nedeniyle derlemelerde hata ayıklama daha uzun sürer.
  • Sürüm derlemeleri varsayılan olarak derlemelerin IL şeridini yapar. Bu yalnızca biraz zaman alır ve büyük olasılıkla cihaza daha küçük bir .app dağıtırken geri kazanmıştır.
  • Her derlemede büyük statik dosyalar dağıtmaktan kaçının (hata ayıklama)
    • UIFileSharingEnabled kullanma (info.plist)
      • Varlıklar bir kez karşıya yüklendikten sonra
  • Şüpheniz olduğunda, --time --time değişikliğinizi ölçmek için bayrağını kullanın

Aşağıdaki ekran görüntüsünde, iOS seçenekleriniz içinde simülatör için bu seçeneklerin nasıl ayarlay olduğu gösterilmiştir:

Linker Project, Desteklenen mimariler ve diğer ayarlar dahil olmak üzere Diğer Seçenekler'i gösteren ekran görüntüsü.

Linker'ı kullanma

Mtouch, uygulamanızı hazırlarken yönetilen kod için bir linker kullanır ve bu da uygulamanın kullanmamış olduğu kodu kaldırır. Teoride bu daha küçük ve dolayısıyla daha hızlı derlemeler sağlar. Bağlantıcı hakkında daha fazla bilgi için iOS'ta bağlama kılavuzuna bakın.

Linker'ı kullanırken aşağıdaki seçenekleri göz önünde kullanın:

  • Cihaz derlemesi için Bağlama'nın seçimi daha uzun sürer ve daha büyük bir uygulama da oluşturulur.
    • Apple, boyut sınırının üzerinde olan uygulamaları reddeder. 'a MinimumOSVersion bağlı olarak bu, 60 MB kadar küçük olabilir.
    • Yerel yürütülebilir dosya ektedir.
    • JIT derlemesi (bir cihazda AOT'nin aksine) kullandığı için Bağlamayın'ın kullanımı simülatör derlemeleri için daha hızlıdır.
  • Bağlantı SDK'sı varsayılan seçenektir.
  • Özellikle sizin gibi bir NuGets veya Bileşenlere sahip olmadığınız kodlar kullanıyorsanız, Bağlantı Tüm'in kullanımı güvenli olabilir. Derlemeleri bağlamayı tercih edersanız, bu hizmetlerden gelen tüm kodlar uygulamanıza dahil edilir ve büyük olasılıkla daha büyük uygulamalar oluşturulur.
    • Ancak, Özellikle dış bileşenler kullanılıyorsa Tüm uygulamanın kilitlenmesi için Bağlantı'ya tıklayın. Bunun nedeni bazı bileşenlerin belirli türlerde Yansıma kullanmasıdır.
    • Statik analiz ve yansıma birlikte çalışmıyor.

Araçlar, özniteliği kullanılarak uygulamanın içindeki şeyleri tutması için talimatı ve olabilir.

Kaynak koduna erişiminiz yoksa veya bir araç tarafından oluşturulmuşsa ve değiştirmek istemiyorsanız, korunması gereken tüm türleri ve üyeleri açıklayan bir XML dosyası oluşturularak yine de bağlantılı olabilir. Ardından, kodu tam olarak --xml={file.name}.xml Öznitelikler'i kullanıyor gibi işlenen proje seçeneklerinize bayrağını ebilirsiniz.

Uygulamaları Kısmen Bağlama

Uygulama derleme sürenizi iyileştirmeye yardımcı olmak için uygulamaları kısmen bağlamanız da mümkündür:

  • Bazı Link All derlemeleri kullanma ve atlama

    • Bazı uygulama boyutu iyileştirmeleri kaybedilir.
    • Kaynak koduna erişim gerekmez.
    • Örneğin, --linkall --linkskip=fieldserviceiOS .
  • seçeneğini Link SDK kullanın ve ihtiyacınız olan [LinkerSafe] derlemelerde özniteliğini kullanın

    • Gerekli kaynak koduna erişim.
    • Sisteme derlemenin bağlantı için güvenli olduğunu ve Xamarin SDK'sı gibi işlendiğinden emin olur.

Objective-C Bağlama

  • Bağlamalar [Assembly: LinkerSafe] üzerinde özniteliğini kullanmak zamandan ve boyuttan tasarruf sağlar.

  • Smartlink

    • Yerel tarafta bitti
    • özniteliğini [LinkWith (SmartLink=true)] kullanma
    • Bu, yerel bağlantı olan kitaplığın yerel kodunu ortadan kaldırması için yerel bağlantının yardımcı olur.
    • Sembollerin dinamik arama işlevinin bu şekilde çalışmay olduğunu unutmayın.

Özet

Bu kılavuzda, bir iOS uygulamasını ve projenin derleme yapılandırmasına ve seçeneklerine bağlı olarak göz önünde bulunduracak seçeneklerin nasıl zamanlayları açıklandı.