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

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

이유 프로그램 라이센스 계약 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)를 사용하는 것으로 보이는 일부 앱을 거부했다는 사실을 알게되었습니다. 앱에 AdSupport가 포함되어 있지 않으면 Flurry는 IDFA를 수집하지 않습니다. 광고 기능을위한 .framework. Apple과의 설명을 구하고 있으며 향후 며칠에 걸쳐 자세히 알아볼 수 있도록 영향을받는 고객을 업데이트 할 것입니다. “

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


답변

Testflight v2.2.0이 충돌로 밝혀졌습니다. 이후 변경 로그에 따라 수정했습니다.Consolidate both SDK versions into one which removes all access to ASIdentifierManager


답변

Crashlytics가 문제였습니다. 이로 인해 몇 가지 앱이 거부되었습니다. 하지만 저는 이미 Crashlytics와 이야기를 나누었으며 오늘이 문제를 해결하는 새로운 업데이트 (버전 2.1.6)를 발표했습니다.

여러 라이브러리에는 AdSupport.framework가 있지만 특별히 호출하지 않는 한 사용하지 않습니다. Crashlytics는 앱이 광고를 지원하는지 확인해야했기 때문에 프레임 워크를 호출했습니다. 그리고 그 변경 사항은 버전 2.1.5에서 구현되었습니다.

따라서 crashlytics를 사용하는 경우 가장 가능성이 높은 이유입니다. 이 문제를 해결하려면 crashlytics가이 수정과 함께 새 버전을 사용할 수 있도록 앱을 다시 보관하면됩니다.

Crashlytics 팀의 답변 : “방금이 업데이트를 푸시했습니다. Mac 앱을 연 상태에서 앱을 다시 빌드하고 실행하여 SDK를 업데이트 할 수 있습니까? 그 이후에도 괜찮을 것입니다. 계속해서 게시 해주세요. 다시 제출합니다 🙂 “

추신 : 이것은 Apple이 ADSupport 사용에 대한 정책을 변경 한 것처럼 보이기 시작했습니다.


답변

나는 이전에 주석에 다음을 작성하여 사람들에게 “문자열”또는 “otool”터미널 명령을 지시했습니다. 그러나 grep 사용에 대한 제안 된 답변이 정말 마음에 듭니다. 따라서 먼저 시도해 볼 수 있습니다. 내 제안은이 명령 앞에 “git”을 추가하는 것입니다. 훨씬 빠르기 때문입니다.

git grep advertisingIdentifier

그래도 작동하지 않으면 이전에 게시 한대로 시도해보십시오.

grep -r advertisingIdentifier .

다음은 터미널 명령에 대한 방법으로 위의 주석에서 이전에 작성한 내용입니다.

Xcode에서 프로젝트의 파일을 검색하거나 AdSupport 프레임 워크를 제거하여 빌드 / 런타임에 실패한 사항을 확인할 수 있습니다.

터미널을 사용하려면 Spotlight (검색)를 클릭하고 터미널을 입력합니다. 검색 결과에 응용 프로그램으로 나타날 때까지 기다리십시오.

터미널에서 “cd”다음에 공백을 입력 한 다음 Xcode 빌드 폴더를 Finder에서 터미널로 끌어다 놓습니다. 이 폴더 이름을 자동으로 입력해야합니다. Enter 키를 누르면 해당 폴더로 디렉토리 (cd)가 변경됩니다.

여기에서 strings공백을 입력 한 다음 라이브러리의 파일 이름 또는 otool, 공백 및 라이브러리의 파일 이름을 입력합니다. 파일 이름을 자동 완성하려면 TAB 키를 누를 수 있어야합니다.


답변

내 앱도 같은 오류로 거부되었습니다! 최신 Facebook SDK (3.12)에서 advertisingIdentifier를 발견했습니다. 아래 방법을 사용하여 라이브러리의 발생 여부를 확인할 수 있습니다.

터미널에서 FacebookSDK.framework를 라이브러리로 열고 다음 명령을 입력했습니다.

otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier

하지만 어떻게해야할지 모르겠습니다. 이 참조 때문에 내 앱이 거부 되었습니까? 그렇다면 내 앱에서 Facebook 기능을 사용하려면 어떻게해야합니까?