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 |
|---|---|
| 1 | Mac System Settings uygulamasını açın ve sol tarafta Privacy & Security seçeneğini bulun |
| 2 | Aş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 |
| 4 | Unity'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 |
|---|---|
| 1 | Launchpad → Other → Terminal yolunu izleyerek açın |
| 2 | Şu komutu girin (sonunda bir boşluk bırakın): sudo xattr -rd com.apple.quarantine |
| 3 | Hata veren xxx.bundle dosyasını doğrudan Terminal penceresine sürükleyin; yol otomatik olarak tamamlanır |
| 4 | Enter tuşuna basın ve Mac oturum açma parolasını girin (yazarken ekranda görünmez, bu normaldir) |
| 5 | Komut 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 |
|---|---|
| 1 | Unity'nin Project penceresinde xxx.bundle dosyasını bulun |
| 2 | Dosyayı seçin ve Inspector penceresine bakın |
| 3 | Platform Settings bölümünde Any Platform seçeneğini işaretleyin ya da yalnızca Standalone / macOS seçeneğini işaretleyin |
| 4 | Exclude Platform seçeneğinin işaretli olmadığından emin olun |

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şul | Açıklama |
|---|---|---|
| 1 | Apple Developer Program | Yılda 99 USD; Developer ID Application sertifikasını almak için kullanılır |
| 2 | Hardened Runtime'ı Etkinleştirme | Unity'de Player Settings → Other Settings → Mac bölümünde Use Hardened Runtime seçeneğini işaretleyin |
| 3 | Benzersiz Bir Bundle ID Yapılandırma | Geliştirici portalındaki değerle aynı olmalıdır |
| 4 | Unity Otomatik İmzalamayı Devre Dışı Bırakma | Paketlemeden 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.--deepkullanmak, 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 |
|---|---|
| 1 | Unity ile .app paketini oluşturun |
| 2 | Derleme 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 hata | Doğru yaklaşım |
|---|---|
--deep kullanmadan yalnızca ana programı imzalamak | Tüm iç bundle / dylib dosyalarını özyinelemeli imzalamak için --deep kullanılmalıdır |
| Hardened Runtime'ı etkinleştirmemek | Unity ile paketlemeden önce Player Settings içinde işaretleyin, aksi halde notarizasyon doğrudan başarısız olur |
| Notarizasyondan sonra bileti staple etmeyi unutmak | xcrun 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ı kullanmak | Standart 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:

