İçeriğe geç
TREN
Atlıhan Harita

LCC for Unity Kullanım Kılavuzu · Özellik Geliştirme Kılavuzu

macOS Geliştirme İzni Sorunları Kılavuzu

Bölüm 15.20 / 17Kılavuz sürümü v2.3.0Türkçe

LCC Unity SDK üçüncü taraf bir webP kod çözme kitaplığı kullandığı için SDK'yı macOS'ta kullanırken "Failed to open xxx.bundle" hatasıyla karşılaşabilirsiniz. Bu durum, macOS'un güvenlik mekanizmasının (Gatekeeper) sertifikasız üçüncü taraf eklentilerin çalışmasını engellemesinden kaynaklanır. Unity'nin veya SDK'nın kendisiyle ilgisi yoktur.

Bu kılavuz iki bölümden oluşur:

  • Bölüm 1: Geliştirme ortamında üçüncü taraf kitaplık izin sorunlarını geçici olarak çözme.
  • Bölüm 2: Uygulamayı paketlerken uygulanacak resmi çözüm (genel dağıtım için).

Bölüm 1: Geliştirme Ortamında Üçüncü Taraf Kitaplık İzin Sorunlarını Geçici Olarak Çözme

Aşağıdaki yöntemler, geliştirme sırasında bundle kısıtlamasını hızla kaldırmak için kullanılır. Öncelik sırasına göre deneyin.

Yöntem 1: Sistem Ayarlarından Doğrudan İzin Verme (en hızlı)

Adımİşlem
1Mac System Settings uygulamasını açın ve sol tarafta Privacy & Security seçeneğini bulun
2Aşağı kaydırarak "Security" bölümünü bulun
3"xxx.bundle was blocked from use" uyarısını bulun ve yanındaki Allow düğmesine tıklayın
4Unity'yi yeniden başlatın, ardından SDK'yı yeniden içe aktarın veya çalıştırın

Yöntem 2: Terminal ile Karantina Özniteliğini Kaldırma (en kapsamlı)

macOS, ağdan indirilen dosyalara com.apple.quarantine karantina özniteliğini ekler. Bu özniteliği bir Terminal komutuyla doğrudan kaldırabilirsiniz.

Adımİşlem
1Launchpad → Other → Terminal yolunu izleyerek açın
2Şu komutu girin (sonunda bir boşluk bırakın): sudo xattr -rd com.apple.quarantine
3Hata veren xxx.bundle dosyasını doğrudan Terminal penceresine sürükleyin; yol otomatik olarak tamamlanır
4Enter tuşuna basın ve Mac oturum açma parolasını girin (yazarken ekranda görünmez, bu normaldir)
5Komut tamamlandıktan sonra Unity'yi yeniden başlatın

İpucu:

Bu komut yönetici yetkisi (sudo) gerektirir. Parolayı yazarken ekranda hiçbir şey görünmez. Parolayı yazmayı bitirip Enter tuşuna basmanız yeterlidir.

Yöntem 3: Çalıştırma İzni Ekleme (ek yöntem)

Yöntem 1 ve 2 işe yaramazsa bundle dosyasına çalıştırma izni ekleyin:

chmod -R 755 /path/to/xxx.bundle

Bundle dosyasını yolu otomatik tamamlamak için Terminal'e sürükleyebilir, Enter tuşuna basabilir ve Unity'yi yeniden başlatabilirsiniz.

Yöntem 4: Unity Eklenti Platform Ayarlarını Kontrol Etme

Adımİşlem
1Unity'nin Project penceresinde xxx.bundle dosyasını bulun
2Dosyayı seçin ve Inspector penceresine bakın
3Platform Settings bölümünde Any Platform seçeneğini işaretleyin ya da yalnızca Standalone / macOS seçeneğini işaretleyin
4Exclude Platform seçeneğinin işaretli olmadığından emin olun
Unity Inspector'da paketin eklenti platform ayarlarını kontrol edin

Inspector içinde Platform Settings bölümünde Any Platform veya macOS seçeneğini işaretleyin

Yöntem 5: Gatekeeper'ı Geçici Olarak Devre Dışı Bırakma (son çare)

Uyarı:

Bu yöntem sistem güvenliğini azaltır. Yalnızca bir geliştirme makinesinde geçici olarak kullanılması önerilir. Geliştirme tamamlandıktan sonra mutlaka yeniden etkinleştirin.

Yukarıdaki yöntemlerin hiçbiri işe yaramazsa sistem güvenlik doğrulamasını geçici olarak devre dışı bırakabilirsiniz:

sudo spctl --master-disable

Devre dışı olup olmadığını doğrulayın:

spctl --status
# assessments disabled is shown when disabled successfully

Geliştirme tamamlandıktan sonra güvenlik korumasını yeniden etkinleştirin:

sudo spctl --master-enable

Bölüm 2: Uygulamayı Paketlerken Üçüncü Taraf Kitaplık İzin Sorunlarını Çözme

Son kullanıcıların üçüncü taraf SDK içeren bir uygulamayı sorunu fark etmeden kullanabilmesi için geliştirici tarafında "derin kod imzalama + Apple notarizasyonu + Staple bilet bağlama" adımlarını tamamlamanız gerekir. Bu, macOS'ta kullanıcı işlemi gerektirmeyen, kurallara uygun tek standart çözümdür.

Ön Koşullar (tümü zorunludur)

No.KoşulAçıklama
1Apple Developer ProgramYılda 99 USD; Developer ID Application sertifikasını almak için kullanılır
2Hardened Runtime'ı EtkinleştirmeUnity'de Player Settings → Other Settings → Mac bölümünde Use Hardened Runtime seçeneğini işaretleyin
3Benzersiz Bir Bundle ID YapılandırmaGeliştirici portalındaki değerle aynı olmalıdır
4Unity Otomatik İmzalamayı Devre Dışı BırakmaPaketlemeden sonra Terminal ile derin imzalamayı elle yapın

İmzalama ve Notarizasyon İş Akışının Tamamı

Adım 1: Genişletilmiş Öznitelikleri Temizleme

xattr -cr "YourApp.app"

Adım 2: Derin Özyinelemeli İmzalama

--deep parametresi, tüm iç .bundle, .dylib ve .framework dosyalarını otomatik olarak dolaşır ve hepsini aynı şekilde imzalar. Böylece üçüncü taraf bundle dosyalarının imzasız olduğu için engellenmesi sorunu kökten çözülür.

codesign --force --deep --options runtime --sign "Developer ID Application: YourCompany (TeamID)" "YourApp.app"

Önemli nokta:

YourCompany (TeamID) ifadesini tam Developer ID'nizle değiştirin. --deep kullanmak, tüm iç üçüncü taraf bundle dosyalarının imzalanmasını sağlar. "İmzalamadan sonra hâlâ hata alıyorum" sorunlarının %90'ının kök nedeni budur.

Adım 3: Notarizasyon için Standart Zip Paketi Oluşturma

Paketlemek için ditto komutunu kullanmalısınız. Sistemin sağ tık sıkıştırmasını kullanmayın (aksi halde notarizasyon doğrulaması başarısız olur).

ditto -c -k --sequesterRsrc --keepParent "YourApp.app" build.zip

Adım 4: Notarizasyon için Apple'a Yükleme

Notarizasyon başvurusu için notarytool (resmi yeni araç) kullanın. Apple'ın arka ucu zararlı kodları otomatik olarak tarar:

xcrun notarytool submit build.zip --apple-id your@apple.com --password app-specific-password --team-id TeamID --wait

Accepted sonucunun dönmesini bekleyin. Bu, notarizasyonun geçtiği anlamına gelir.

Adım 5: Notarizasyon Biletini Uygulamaya Bağlama (Staple)

Staple işleminden sonra kullanıcılar uygulamayı çevrimdışı açsalar bile doğrulamadan geçebilir:

xcrun stapler staple "YourApp.app"
# Verify whether it succeeded
xcrun stapler validate "YourApp.app"

Dahili Test / Kurumsal İntranet Dağıtımı (alternatif)

Henüz bir Apple geliştirici hesabınız yoksa aşağıdaki yaklaşımla intranet içinde dağıtım yapabilirsiniz:

Adımİşlem
1Unity ile .app paketini oluşturun
2Derleme makinesinde şu komutu çalıştırın: xattr -rd com.apple.quarantine "YourApp.app"
3İntranet araçlarıyla (scp, kurumsal bulut sürücü, USB bellek) dağıtın; tarayıcı üzerinden indirmeyin

Sınırlama:

Bu yaklaşım yalnızca intranet üzerinden aktarım için geçerlidir. Tarayıcıdan indirme karantina özniteliğini yeniden ekler ve bundle hatası tekrar ortaya çıkar. Bu nedenle genel dağıtım için uygun değildir.

Sık Yapılan Hatalar

Sık yapılan hataDoğru yaklaşım
--deep kullanmadan yalnızca ana programı imzalamakTüm iç bundle / dylib dosyalarını özyinelemeli imzalamak için --deep kullanılmalıdır
Hardened Runtime'ı etkinleştirmemekUnity ile paketlemeden önce Player Settings içinde işaretleyin, aksi halde notarizasyon doğrudan başarısız olur
Notarizasyondan sonra bileti staple etmeyi unutmakxcrun stapler staple komutu çalıştırılmalıdır, aksi halde çevrimdışı açılışta iletişim kutusu yine görünür
İmzalamadan önce genişletilmiş öznitelikleri temizlememekÖnce xattr -cr komutuyla tüm bundle dosyalarındaki kalıntı öznitelikleri temizleyin, ardından imzalayın
ditto yerine sistemin sağ tık sıkıştırmasını kullanmakStandart ditto -c -k paketleme kullanılmalıdır, aksi halde notarizasyon doğrulaması başarısız olur

Özet

Genel dağıtım için tek standart çözüm = Apple Developer ID + derin codesign + notarytool notarizasyonu + stapler bileti. İşlemler tamamlandığında kullanıcılar uygulamayı indirip hemen kullanabilir; güvenlik iletişim kutusu çıkmaz ve sorunu fark etmezler.

Bu bölüm XGRIDS'in resmî kullanım kılavuzundan Türkçeye çevrildi; ekran görüntüleri ve arayüz adları özgün haliyle İngilizcedir. İngilizce aslı (yeni sekmede açılır) · Güncelleme:

XGRIDS Türkiye

Kurulumda ve Sahada Yanınızdayız

Atlıhan Harita; cihaz kurulumu, firmware güncellemesi, yazılım kullanımı ve saha uygulamalarında eğitim ve teknik destek verir. Sorunuzu iletin, uzmanımız size dönsün.

+90 216 546 0804