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


81

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

이유 프로그램 라이센스 계약 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. 어느 도서관이 문제인지 아는 사람이 있습니까? 감사


IMO 그들은 직접 검색을 수행하기 위해 많은 힌트를 제공했습니다 ... 시도했지만 찾지 못했습니까?
Adriano Repetti 2014 년

10
나는 구글의 분석을 통해이 문제를 가진 사람들을 본 적이
jcesarmobile

1
하지만 신고를받는 가장 큰 이유는 TestFlight입니다.이 ID는 필수입니다. testflightapp.com/sdk/ios/doc/2.0.0- "AdSupport.framework는 iOS 6.0 이상에서 고유하게 식별하기 위해 필요합니다. ASIdentifierManager를 사용하여 앱에있는 사용자 수를 추정 할 수 있도록 사용자 수를 추정 할 수 있습니다. 앱의 프레임 워크를 약하게 연결할 수 있습니다. 앱이 AdSupport.framework와 연결되지 않으면 TestFlight SDK가 자동으로 실행중인 앱에 대해로드합니다. iOS 6.0 이상. "
Louis St-Amour 2014

5
Testflight v2.2.0이 충돌로 밝혀졌습니다. 이후 변경 로그에 따라 수정했습니다. 두 SDK 버전을 모두 ASIdentifierManager에 대한 모든 액세스를 제거하는 하나로 통합합니다.
user2844801

5
AdSupport.framework가 선택 사항으로 연결되어 있다면 App Store의 문제를 해결할 수 있습니까?
Legoless

답변:


113

터미널에서 :

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

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

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


1
나도 똑같은 걸 맞았 어. libFlurry_4.3.1.a 및 libGoogleAnalyticsServices.a에는 모두 advertisingIdentifier가 있습니다. 언제 업데이트 될지 또는 해결 방법이 있는지 알 수 없습니다.
Vidal Graupera 2014

2
우리는 이것에 대해 무엇을하고 있는가? 우리는 단지 ... 모두 우리의 분석을 제거 할 수 없습니다
Nir 씨 골란에게

@RedYeti-내 오타를 수정 해 주셔서 감사합니다! 죄송합니다-복사 / 붙여 넣기 오류 :(.
Adam

1
@LouWeed-이 경우 앱에서 Flurry를 제거하고 Flurry가 당황하고 있으며 곧 새로운 업데이트를 제공 할 것이라고 가정합니다. 무료 타사 분석을 사용할 때의 단점은 때때로 이런 식으로 망가진다는 것입니다. 나는 과거에 Flurry, TestFlight, Facebook, Parse 및 몇몇 다른 사람들과 비슷한 경험을했습니다. 발생합니다. 하지만 서비스 비용을 지불하지 않으면 불평 할 수 없습니다. :)
Adam

2
위의 명령을 사용할 때 Flurry 4.3.2가 AdvertisingIdentifier와 일치하지 않음을 확인할 수 있습니다.
crafterm

17

최신 정보

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}로 변경하십시오.

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

누군가를 돕고 싶습니다.

내 영어 죄송합니다. =]


AdSupport 프레임 워크 없이는 여전히 내 앱을 빌드 할 수 없습니다. 나는 정의되지 않은 심볼 ASIIdentifierManager 얻을
andygeers

Google 태그 관리자를 사용하고 있습니까? 그렇다면이 솔루션은 작동하지 않기 때문입니다.
Glauco Neves 2014

나는 (? 태그 관리자도 무엇을 하는가) 그것은 결합 된 GA / 태그 관리자 라이브러리 파일 생각입니다 알고하지 않는 것이
andygeers

Pods / Pods.xcconfig를 OTHER_LDFLAGS직접 수동으로 편집 할 수도 있습니다.
Rivera

Google은 오늘 Google Analytics Services iOS SDK v3.03c를 출시했습니다. 내 대답을 업데이트했습니다. =]
Glauco Neves 2014

13

저에게는 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 버전을 출시했습니다.


4

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


4

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

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

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

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

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


3

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

git grep advertisingIdentifier

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

grep -r advertisingIdentifier . 

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

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

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

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

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


1

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

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

otool -v -s __TEXT __objc_methname FacebookSDK | grep AdvertisingIdentifier

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


1
여기,이 도움이 될 것입니다 - stackoverflow.com/questions/21574680/...
앤드류

답변 감사합니다! 변경 한 후 내 앱을 다시 제출했습니다. 다시 거부되지 않기를 바랍니다. :)
bolonn

@bolonn-위의 변경 사항을 적용한 후 Apple에서 앱을 승인 했습니까?
RoHaN

예, 승인되었습니다!
bolonn 2014

1

이것은 표면에 보이는 것보다 조금 더 복잡합니다. 몇 가지 실험 끝에 AdSupport 프레임 워크에서 참조되는 클래스에만 직접 액세스하더라도 AdSupport 프레임 워크가 연결되어 있음을 발견했습니다. 아이러니하게도[AsIdentifierManager class] 의 AdSupport 프레임 워크가 연결되었는지 여부를 확인하기 위해 타사 라이브러리의 많은에 사용되는, 실제로 것입니다 원인이 AdSupport 프레임 워크를 링크 할 수 있습니다. 를 사용하여 클래스를 난독 NSClassFromString(@"AsIdentfierManager")화해도 AdSupport 프레임 워크가 자동으로 연결되지 않습니다. 물론 대부분의 경우이 코드는 타사 라이브러리에 있으므로 제어 할 수는 없지만이 작업이 진행되고 있습니다.

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


유용한 게시물에 감사드립니다. 따라서 우리가 약한 링크 (선택 사항)를 프로젝트에 대한 프레임 워크 (제 경우에는 "GoogleInteractiveMediaAds"라는 Google 광고 프레임 워크)로 연결하면 내부에 AdSupport.framework가 있습니다. 앱을 제출할 때 앱에 아무것도 표시되지 않더라도 광고 (광고를 전혀 표시하지 않는 유료 버전이 있음), Apple에서 거부합니까 ??
C0D3

0

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.