developer tip

내 앱이 광고 지원 프레임 워크를 사용하여 거부되었습니다.

optionbox 2020. 10. 5. 07:52
반응형

내 앱이 광고 지원 프레임 워크를 사용하여 거부되었습니다. 어떤 도서관이 책임이 있습니까?


이것은 거부 사유와 관련하여 아무것도 변경하지 않은 단순한 업데이트였습니다. 해결 센터의 응답은 다음과 같습니다.

이유 프로그램 라이센스 계약 PLA 3.3.12

귀하의 앱은 iOS 광고 식별자를 사용하지만 광고 기능이 포함되어 있지 않습니다. 이는 App Store 검토 지침에서 요구하는 iOS 개발자 프로그램 라이선스 계약의 조건을 준수하지 않습니다.

특히 iOS 개발자 프로그램 라이선스 계약의 섹션 3.3.12에는 다음과 같이 명시되어 있습니다.

"귀하와 귀하의 애플리케이션 (및 귀하가 광고 서비스를 제공하기로 계약 한 제 3 자)은 광고를 제공 할 목적으로 만 광고 식별자 및 광고 식별자 사용을 통해 얻은 모든 정보를 사용할 수 있습니다. 사용자가 재설정하는 경우 광고 식별자, 그러면 귀하는 이전 광고 식별자 및 파생 된 정보를 재설정 된 광고 식별자와 직접 또는 간접적으로 결합, 상관, 연결 또는 연결하지 않을 것에 동의합니다. "

타사 라이브러리를 포함하여 코드를 확인하여 다음 인스턴스를 제거하십시오.

클래스 : ASIdentifierManager
선택기 : AdvertisingIdentifier
프레임 워크 : AdSupport.framework

향후 버전에 광고를 통합하려는 경우 광고 기능을 포함 할 때까지 앱에서 광고 식별자를 제거하십시오.

광고 식별자를 찾으려면 "nm"도구를 사용하십시오. "nm"도구에 대한 정보를 보려면 터미널 창을 열고 "man nm"를 입력하십시오.

라이브러리 소스에 액세스 할 수없는 경우 "strings"또는 "otool"명령 줄 도구를 사용하여 컴파일 된 바이너리를 검색 할 수 있습니다. "strings"도구는 라이브러리가 호출하는 메소드를 나열하고 "otool -ov"는 Objective-C 클래스 구조와 정의 된 메소드를 나열합니다. 이러한 기술은 문제가있는 코드가있는 위치를 좁히는 데 도움이 될 수 있습니다.

내가 사용중인 타사 라이브러리는 최신 버전의 parse.com sdk, latest version of flurry analytics, and version 2.2 of test flight. 어느 도서관이 문제인지 아는 사람이 있습니까? 감사


터미널에서 :

  1. 프로젝트의 루트 폴더로 이동하십시오.
  2. 유형 : grep -r advertisingIdentifier . (끝의 점이 중요)

이것은 모든 파일을 재귀 적으로 확인하고 문제가되는 라이브러리의 이름을 제공합니다.

(제 경우에는 Flurry였습니다)


최신 정보

Google은 기본적으로 AdSupport.framework 종속성을 제거하는 Google Analytics Services iOS SDK v3.03c를 출시했습니다.

릴리스 버전 3.03c (2014 년 2 월 19 일)에 대한 전체 변경 로그 항목 : https://developers.google.com/analytics/devguides/collection/ios/changelog

Old Awnser

내 문제는 Google Analytics와 TestFlight에있었습니다.

TestFlight의 경우 라이브러리를 버전 2.2.1 ( https://www.testflightapp.com/sdk/ios/release_notes/2.2.1/ )으로 업데이트합니다 .

그러나 Google Analytics를 업데이트하려면 -ObjC 플래그를 제거해야했습니다. 그러나 Cocoapods를 사용하여 세 번째 라이브러리 중 일부를 관리하기 때문에 제거 할 수 없었습니다. 그래서 다음을 수행했습니다.

1-libGoogleAnalytics.a를 버전 3.03a로 업데이트하기 시작했습니다 (2014 년 2 월 5 일).

2-AdSupport.framework도 제거되었습니다.

3- "Target-> Build Settings-> Other Linker Flags"아래에 "-force_load \"$ {PROJECT_DIR} /Source/Library/GoogleAnalyticsServicesiOS_3.03a ""를 추가했습니다 (내 프로젝트에서 GoogleAnalytics는 / Source / 안에 있습니다. Library / 폴더, 사용자가 직접 구성해야 함)

하지만 -ObjC 플래그를 제거 할 수 없었기 때문에 Cocoapods에서 -force_load 플래그를 사용하는 방법을 검색 한 다음 두 가지 유용한 링크를 찾았습니다.

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

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

요약하면 "Target-> Build Settings-> Other Linker Flags"에서 "-force_load $ (TARGET_BUILD_DIR) /libPods.a"에 대한 -ObjC 플래그를 변경했습니다.

하지만 다시 앱을 게시하려고 할 때 컴파일러가 libPods.a를 찾지 못했다는 오류가 발생하여 "대상-> 빌드 설정-> 기타 링커 플래그-> 릴리스"로 이동했습니다. 이 문자열 $ (TARGET_BUILD_DIR)을 $ {BUILT_PRODUCTS_DIR}로 변경하십시오.

그래서 다른 링커 플래그는 아래 이미지와 같습니다. 기타 링커 플래그

누군가를 돕고 싶습니다.

내 영어 죄송합니다. =]


저에게는 Flurry Analytics와 TestFlight가 모두 문제였습니다.

TestFlight의 경우 업데이트하는 것만 큼 쉽습니다. 2.2.1 버전은 문제를 일으키지 않습니다 (애플이 제안한 것처럼 문자열을 사용하여 확인했습니다)

Flurry의 경우 현재 Flurry를 제거하는 것 외에는 수정 사항이 없으며 Lou Weed의 제안과는 반대로 AdSupport.framework가 연결되어 있지 않아도 앱이 거부됩니다.

다음은 Flurry 지원 답변입니다.

"Flurry에 문의 해 주셔서 감사합니다. 최근 Apple이 광고 기능을 포함하지 않고 IDFA (Identifier for Advertising)를 사용하는 것으로 보이는 일부 앱을 거부했다는 사실을 알게되었습니다. 앱에 AdSupport가 포함되어 있지 않으면 Flurry가 IDFA를 수집하지 않습니다. 광고 기능을위한 .framework. Apple과의 명확한 설명을 구하고 있으며 향후 며칠에 걸쳐 자세히 알아볼 수 있도록 영향을받는 고객을 업데이트 할 것입니다. "

Flurry는 해당 문제를 구체적으로 해결하는 SDK 4.3.2 버전을 출시했습니다.


Turns out the Testflight v2.2.0 was the conflict. They have since fixed it according to their changelog: Consolidate both SDK versions into one which removes all access to ASIdentifierManager


Crashlytics was the problem. We had a few apps rejected because of it. But I already talked with Crashlytics and they released a new update today (version 2.1.6) which fix this issue.

Several libraries have the AdSupport.framework but they do not use it unless specifically called. Crashlytics was calling the framework because it had to check if the app had support for ads. And that change was implemented on version 2.1.5

So if you are using crashlytics, that's the most probable reason. To fix that, just re-archive your app so crashlytics can use the new version with this fix.

Response from Crashlytics Team: "We just pushed out an update for this- can you build and run your app again with the Mac app open so it can update your SDK? You'll be all good to go after that! Keep me posted after you resubmit :)"

PS: This is starting to happen because Apple seem to have changed their policy for ADSupport usage.


I'd previously written the following in comments, directing people to the "strings" or "otool" terminal commands. However, I really like the suggested answer of using grep. So you can try it first. My suggestion is to prepend "git" to that command, because it's so much faster:

git grep advertisingIdentifier

If that doesn't work, then try (as posted earlier):

grep -r advertisingIdentifier . 

What follows is what I'd previously written in a comment above, as a how-to for terminal commands:

You can search your project's files in Xcode or you can try removing the AdSupport framework to see what fails at build/run time.

To use the terminal, click Spotlight (search) and type Terminal. Wait for it to appear as an Application in the search results.

Once in Terminal, type "cd" followed by a space, then drag and drop your Xcode build folder from Finder into Terminal. This should automatically type that folder name in. Hit Enter, and it will change directories (cd) you to that folder.

From there, type strings then a space, then the filename for your library or otool, a space and the filename for library. You should be able to hit TAB to auto-complete filenames.


My app was also rejected with the same error! I found an occurrence of advertisingIdentifier in the latest Facebook SDK (3.12). Maybe you can check your library's for an occurence with the method below:

I opened the FacebookSDK.framework as a library in the terminal and typed the following command

otool -v -s __TEXT __objc_methname FacebookSDK | grep advertisingIdentifier

But I don't know what to do. Was my app rejected because of this reference? If yes what to do if I want to use facebook functionalities in my app?


This is a bit more complicated than it seems on the surface. After some experimentation I found that the AdSupport Framework is linked even if only directly accessing classes that are referenced in the AdSupport Framework. Ironically, [AsIdentifierManager class], which is used in a lot of third-party libraries to check whether or not the AdSupport Framework has been linked, will actually cause the AdSupport Framework to be linked. Obfuscating the class by using NSClassFromString(@"AsIdentfierManager") will not cause the AdSupport framework to be automatically linked. Of course, most of the time this code will be in third-party libraries so you won't have much control over it, however, this is what's going on.

GitHub에 Segment.io의 프레임 워크를 사용하여이 동작을 보여주는 예제 프로젝트를 빌드했습니다. https://github.com/distefam/AdSupportDemo


Flurry Analytics는이 API도 사용합니다.
터미널 출력 :

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

Flurry는 AdSupport 프레임 워크가 연결되지 않은 경우 선택기가 호출되지 않는다고 말합니다.
그래서 프레임 워크를 제거하고 다시 제출을 시도했습니다.

참고 URL : https://stackoverflow.com/questions/21489097/my-app-was-just-rejected-for-using-the-ad-support-framework-which-library-is-re

반응형