Uygulamam, Reklam destek çerçevesini kullandığı için reddedildi. Hangi kütüphane sorumludur?


81

Bu, reddedilme nedeniyle ilgili hiçbir şeyi değiştirmeyen bir güncellemeydi. İşte çözüm merkezinden gelen yanıt:

Nedenler Program Lisans Sözleşmesi PLA 3.3.12

Uygulamanızın iOS Reklam Tanımlayıcısını kullandığını ancak reklam işlevi içermediğini tespit ettik. Bu, App Store İnceleme Yönergeleri'nin gerektirdiği şekilde iOS Geliştirici Programı Lisans Sözleşmesinin koşullarına uymaz.

Özellikle, iOS Geliştirici Programı Lisans Sözleşmesi'nin 3.3.12 bölümü şunları belirtir:

"Siz ve Uygulamalarınız (ve reklam hizmeti vermek için sözleşme yaptığınız herhangi bir üçüncü taraf), Reklam Tanımlayıcısını ve Reklam Tanımlayıcısının kullanımıyla elde edilen herhangi bir bilgiyi, yalnızca reklam hizmeti vermek amacıyla kullanabilir. Bir kullanıcı, Reklam Tanımlayıcı, daha sonra önceki Reklam Tanımlayıcısını ve türetilen bilgileri sıfırlanan Reklam Tanımlayıcısıyla doğrudan veya dolaylı olarak birleştirmemeyi, ilişkilendirmemeyi, bağlamamayı veya başka bir şekilde ilişkilendirmemeyi kabul edersiniz. "

Aşağıdakilerin herhangi bir örneğini kaldırmak için lütfen üçüncü taraf kitaplıkları dahil olmak üzere kodunuzu kontrol edin:

sınıf: ASIdentifierManager
seçici: advertisingIdentifier
çerçevesi: AdSupport.framework

Reklamları gelecekteki bir sürümde dahil etmeyi planlıyorsanız, reklam işlevini ekleyene kadar lütfen Reklam Tanımlayıcıyı uygulamanızdan kaldırın.

Reklam Tanımlayıcısını bulmanıza yardımcı olması için "nm" aracını kullanın. "Nm" aracı hakkında bilgi için, bir terminal penceresi açın ve "man nm" girin.

Kitaplık kaynağına erişiminiz yoksa, "dizeler" veya "otool" komut satırı araçlarını kullanarak derlenmiş ikili dosyada arama yapabilirsiniz. "Dizeler" aracı, kitaplığın çağırdığı yöntemleri listeler ve "otool -ov", Objective-C sınıfı yapılarını ve bunların tanımlanmış yöntemlerini listeler. Bu teknikler, sorunlu kodun bulunduğu yeri daraltmanıza yardımcı olabilir.

Kullandığım üçüncü taraf kitaplıkları uygulamasının en son sürümü parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight. Sorunun hangi kitaplık olduğunu bilen var mı? Teşekkürler


IMO, bu aramayı kendi başınıza yapmanız için birçok ipucu sağladılar ... denediniz ve bulamadınız mı?
Adriano Repetti

10
Google Analytics ile bu sorunu yaşayan insanlar gördüm
jcesarmobile

1
Ancak, işaretlenmenizin en büyük nedeni, bu kimliğin çok önemli olduğu TestFlight'tır : testflightapp.com/sdk/ios/doc/2.0.0 - "Benzersiz bir şekilde tanımlamak için iOS 6.0+ için AdSupport.framework gereklidir uygulamanızın sahip olduğu kullanıcı sayısını tahmin edebilmemiz için (ASIdentifierManager kullanarak). Uygulamanızdaki çerçeveyi zayıf bağlayabilirsiniz. Uygulamanız AdSupport.framework ile bağlantı kurmazsa, TestFlight SDK, üzerinde çalışan uygulamalar için onu otomatik olarak yükler iOS 6.0+. "
Louis St-Amour

5
Testflight v2.2.0'ın bir çelişki olduğu ortaya çıktı. O zamandan beri, değişiklik günlüklerine göre düzelttiler: Her iki SDK sürümünü de ASIdentifierManager'a tüm erişimi kaldıran tek bir sürümde birleştirin
user2844801

5
AdSupport.framework isteğe bağlı olarak bağlantılıysa, bu App Store'daki sorunu çözer mi?
Legoless

Yanıtlar:


114

Terminalde:

  1. Projenizin kök klasörüne gidin
  2. Tür: grep -r advertisingIdentifier . (sondaki nokta kritiktir)

Bu, her dosyayı yinelemeli olarak kontrol edecek ve size sorun teşkil eden kütüphanenin adını verecektir.

(benim durumumda Flurry idi)


1
Ben de aynı şeyle vuruldum. libFlurry_4.3.1.a ve libGoogleAnalyticsServices.a'nın her ikisinde de advertisingIdentifier vardır. Bunların ne zaman güncelleneceğini veya herhangi bir çalışma olup olmadığını bilmiyorum.
Vidal Graupera

2
bunun için ne yapıyoruz? analitiği tamamen kaldıramayız ...
Nir Golan

@RedYeti - yazım hatamı düzelttiğiniz için teşekkürler! Bunun için üzgünüm - kopyala / yapıştır hatası :(.
Adam

1
@LouWeed - bu olduğunda, Flurry'yi uygulamalarınızdan kaldırmanız ve Flurry'nin paniğe kapıldığını ve ÇOK yakında yeni bir güncelleme sağlayacağını varsaymanız gerekir. Ücretsiz üçüncü taraf analitiği kullanmanın dezavantajı, bazen bu şekilde hata yapmalarıdır. Geçmişte Flurry, TestFlight, Facebook, Parse ve birkaç diğeriyle benzerlikler yaşadım. Olur. Ama hizmet için ödeme yapmıyorsanız, fazla şikayet edemezsiniz :)
Adam

2
Yukarıdaki komutu kullanırken Flurry 4.3.2'nin AdvertisingIdentifier ile eşleşmediğini doğrulayabilir.
crafterm

17

Güncelleme

Google, varsayılan olarak AdSupport.framework bağımlılığını kaldıran Google Analytics Hizmetleri iOS SDK v3.03c'yi yayınladı.

Sürüm 3.03c (19 Şubat 2014) için tam değişiklik günlüğü girişi: https://developers.google.com/analytics/devguides/collection/ios/changelog

Eski Awnser

Sorunum Google Analytics ve TestFlight ile ilgiliydi.

TestFlight için kitaplığı 2.2.1 sürümüne ( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ ) güncelliyorum .

Ancak Google Analytics'i güncellemek için -ObjC bayrağını kaldırmam gerekti. Ama bazı üçüncü kütüphaneleri yönetmek için Cocoapods kullandığım için, onu öylece kaldıramadım. Ben de şunu yaptım:

1 - libGoogleAnalytics.a'yı Sürüm 3.03a'ya güncellemeye başladı (5 Şubat 2014)

2 - daha sonra AdSupport.framework da kaldırıldı

3 - "Hedef -> Yapı Ayarları -> Diğer Bağlayıcı Bayrakları" altına "-force_load \" $ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a "" eklendi (Projemde GoogleAnalytics'in / Source / içinde olduğunu unutmayın. Kitaplık / klasör ve kendinizinkini yapılandırmanız gerekir)

Ama -ObjC bayrağını kaldırmadığım için -force_load bayrağının Cocoapods ile nasıl kullanılacağını araştırdım, sonra iki faydalı bağlantı buldum:

1 - https://github.com/CocoaPods/CocoaPods/issues/712

2 - http://www.deanmao.com/2012/12/31/linker-error-using-cocoapods/

Özetlemek gerekirse, "-force_load $ (TARGET_BUILD_DIR) /libPods.a" için -ObjC bayrağını "Target -> Build Settings -> Other Linker Flags" altında da değiştirdim

Ancak yine, uygulamamı yayınlamaya çalıştığımda, derleyicinin libPods.a'yı bulamadığını söyleyen bir hata aldım, bu yüzden "Hedef -> Derleme Ayarları -> Diğer Bağlayıcı Bayrakları -> Yayın" seçeneğine gittim ve bu dizeyi $ (TARGET_BUILD_DIR) $ {BUILT_PRODUCTS_DIR} olarak değiştirin.

Böylece Diğer Bağlayıcı Bayraklarım aşağıdaki resimdeki gibi oldu. Diğer Bağlayıcı İşaretleri

Birine yardım etmeyi umuyorum.

İngilizcem için üzgünüm. =]


Uygulamamı hâlâ AdSupport çerçevesi olmadan derleyemiyorum. Tanımlanmamış sembol ASIIdentifierManager alıyorum
andygeers

Google Etiket Yöneticisi kullanıyor musunuz? Çünkü öyleyseniz, bu çözüm işe yaramayacaktır.
Glauco Neves

Bildiğimden değil (Etiket Yöneticisi ne yapıyor?) Bu birleşik GA / Etiket Yöneticisi kitaplık dosyası olsa da
andygeers

Ayrıca Pod'ları / Pods.xcconfig'leri OTHER_LDFLAGSdoğrudan manuel olarak da düzenleyebilirsiniz .
Rivera

Google bugün Google Analytics Hizmetleri iOS SDK v3.03c'yi yayınladı. Cevabımı güncelledim. =]
Glauco Neves

13

Benim için Flurry Analytics ve TestFlight sorun teşkil ediyordu.

TestFlight için, onu güncellemek kadar kolaydır. 2.2.1 sürümü herhangi bir soruna neden olmayacak (Apple'ın önerdiği gibi dizeleri kullanarak kontrol ettim)

Flurry için şu anda Flurry'yi kaldırmak dışında bir düzeltme yoktur ve Lou Weed önerisinin aksine, AdSupport.framework bağlantılı olmasa bile uygulamanız reddedilecektir.

İşte Flurry destek yanıtı:

"Flurry'ye ulaştığınız için teşekkür ederiz. Kısa süre önce Apple'ın, Reklamcılık için Tanımlayıcı'yı (IDFA) kullandığına inandığı bazı uygulamaları, reklam işlevselliği eklemeden reddettiğini öğrendik. Lütfen Flurry'nin, bir uygulama Reklam Desteği içermediği sürece IDFA'yı toplamadığını unutmayın. Reklam işlevselliği için .framework. Apple ile açıklama istiyoruz ve önümüzdeki birkaç gün içinde daha fazla bilgi edindikçe etkilenen müşterilerimizi güncelleyeceğiz. "

Flurry, SDK'sının 4.3.2 sürümünü yayınladı, bu da özellikle bu sorunu çözdü.


4

Testflight v2.2.0'ın bir çelişki olduğu ortaya çıktı. O zamandan beri değişiklik günlüğüne göre düzelttiler:Consolidate both SDK versions into one which removes all access to ASIdentifierManager


4

Sorun Crashlytics'ti. Bu yüzden birkaç uygulamamız reddedildi. Ancak Crashlytics ile zaten konuştum ve bugün bu sorunu gideren yeni bir güncelleme (sürüm 2.1.6) yayınladılar.

Birkaç kitaplık AdSupport.framework'a sahiptir, ancak özel olarak çağrılmadıkça onu kullanmazlar. Crashlytics, uygulamanın reklam desteği olup olmadığını kontrol etmesi gerektiğinden çerçeveyi çağırıyordu. Ve bu değişiklik 2.1.5 sürümünde uygulandı

Yani crashlytics kullanıyorsanız, bu en olası sebeptir. Bunu düzeltmek için, uygulamanızı yeniden arşivleyin, böylece crashlytics bu düzeltmeyle yeni sürümü kullanabilir.

Crashlytics Ekibinin yanıtı: "Bunun için bir güncelleme yayınladık - SDK'nızı güncelleyebilmek için Mac uygulaması açıkken uygulamanızı yeniden oluşturup çalıştırabilir misiniz? Bundan sonra her şey yolunda gidecek! yeniden gönder :) "

Not: Bu, Apple'ın ADSupport kullanımına ilişkin politikasını değiştirmiş gibi görünmesi nedeniyle gerçekleşmeye başlıyor.


3

Daha önce, insanları "dizgiler" veya "otool" terminal komutlarına yönlendirerek yorumlarda şunları yazmıştım. Bununla birlikte, grep kullanmanın önerilen cevabını gerçekten beğendim. Yani önce deneyebilirsiniz. Benim önerim, bu komutun başına "git" i eklemek, çünkü çok daha hızlı:

git grep advertisingIdentifier

Bu işe yaramazsa, deneyin (daha önce belirtildiği gibi):

grep -r advertisingIdentifier . 

Aşağıda, daha önce yukarıdaki bir yorumda, terminal komutları için nasıl yapılır olarak yazmış olduğum şey var:

Projenizin dosyalarını Xcode'da arayabilir veya derleme / çalıştırma zamanında neyin başarısız olduğunu görmek için AdSupport çerçevesini kaldırmayı deneyebilirsiniz.

Terminali kullanmak için Spotlight (arama) öğesine tıklayın ve Terminal yazın. Arama sonuçlarında Uygulama olarak görünmesini bekleyin.

Terminal'e girdikten sonra, "cd" yazın ve ardından bir boşluk bırakın, ardından Xcode derleme klasörünüzü Finder'dan Terminal'e sürükleyip bırakın. Bu, o klasör adını otomatik olarak yazmalıdır. Enter tuşuna basın ve o klasöre dizinleri (cd) değiştirecektir.

Oradan, stringsbir boşluk, ardından kitaplığınızın dosya adını veya kitaplık için otoolbir boşluk ve dosya adını yazın. Dosya adlarını otomatik olarak tamamlamak için TAB tuşuna basabilmeniz gerekir.


1

Uygulamam da aynı hatayla reddedildi! En son Facebook SDK'sında (3.12) bir AdvertisingIdentifier örneği buldum. Belki aşağıdaki yöntemle kütüphanenizde bir oluşum olup olmadığını kontrol edebilirsiniz:

FacebookSDK.framework'u terminalde bir kütüphane olarak açtım ve aşağıdaki komutu yazdım

otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier

Ama ne yapacağımı bilmiyorum. Uygulamam bu referans yüzünden mi reddedildi? Evet ise uygulamamda facebook işlevlerini kullanmak istersem ne yapmalıyım?


1
Burada yardımcı olacak bu - stackoverflow.com/questions/21574680/…
Andrew

Cevap için teşekkür ederim! Değişiklikleri yaptım ve uygulamamı yeniden gönderdim, umarım tekrar reddedilmez :)
bolonn

@bolonn - yukarıdaki değişiklikleri yaptıktan sonra uygulamanız Apple tarafından onaylandı mı?
RoHaN

Evet, onaylandı!
bolonn

1

Bu, yüzeyde göründüğünden biraz daha karmaşık. Biraz denemeden sonra, yalnızca AdSupport Çerçevesinde referans verilen sınıflara doğrudan erişiyor olsa bile AdSupport Çerçevesinin bağlantılı olduğunu buldum. İronik bir şekilde, [AsIdentifierManager class]birçok üçüncü taraf kitaplığında AdSupport Çerçevesinin bağlanıp bağlanmadığını kontrol etmek için kullanılan, aslında AdSupport Çerçevesinin bağlanmasına neden olacaktır . Kullanarak sınıfı NSClassFromString(@"AsIdentfierManager")gizlemek, AdSupport çerçevesinin otomatik olarak bağlanmasına neden olmaz. Elbette, bu kod çoğu zaman üçüncü taraf kitaplıklarında olacaktır, bu nedenle üzerinde fazla kontrole sahip olmayacaksınız, ancak olan şey bu.

GitHub'da Segment.io'nun çerçevesini kullanarak bu davranışı gösteren örnek bir proje oluşturdum. https://github.com/distefam/AdSupportDemo


Yararlı gönderi için teşekkürler. Dolayısıyla, bir çerçeveyi projeye zayıf bağladığımızda (isteğe bağlı) (benim durumumda, içinde AdSupport.framework bulunan Google reklam çerçevesi "GoogleInteractiveMediaAds"), uygulamamı gönderirken uygulamam hiçbir şey göstermese bile reklamlar (hiç reklam göstermeyen ücretli bir sürümü var), Apple tarafından reddedilecek mi?
C0D3

0

Flurry Analytics de bu API'yi kullanır.
Terminal çıkışı:

Binary file ./Lib/Flurry/libFlurry_4.3.0.a matches

Flurry, AdSupport çerçevesi bağlantılı değilse seçicinin çağrılmadığını söylüyor.
Bu yüzden çerçeveyi kaldırdım ve tekrar göndermeyi denedim.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.