2012-01-01 2 views
2

문제점 : 내가 사용하는 라이브러리가 ARC (Automatic Reference Counting)를 지원하지 않습니다. (ARC에 익숙하지 않은 사람들을 위해)사용자 정의 xcode 템플릿이 부분적으로 선택적으로 ARC (Automatic Reference Counting)를 활성화 할 수 있습니까?

배경 : http://developer.apple.com/library/ios/#releasenotes/ObjectiveC/RN-TransitioningToARC/_index.html

수동 해결 방법 : 라이브러리의 각 구현 파일에 대한 -fno-objc 아크 옵션을 추가하고, 그렇지 않으면 일반적으로 내 응용 프로그램 코드에서 ARC를 사용합니다.

관측 다음 템플릿 파일을 복사 할 수있는 가장 가능성에 사용하거나 완전히 ON 또는 OFF (위의 컴파일러 플래그를 추가하지 않고 - 인 - 사이에 내가 필요로하는 솔루션) ARC를 설정 :

을 " /Developer/Platforms/iPhoneOS.platform/Developer/Library/Xcode/Templates/Project Templates/iOS 참조 카운팅 .xctemplate "

질문 다시 입력 : 수동 솔루션을 피할 수있는 방법이 있습니까? (-fno-objc-arc 옵션을 100 번 이상 복사하여 붙여 넣기하는 것은 불편합니다 .Apple이 프로그래밍 방식의 솔루션을 제공하기를 바랍니다 .Xcode UI가 바뀔 가능성이 높기 때문에 Automator.app을 사용하여 복사/붙여 넣기를하고 싶지는 않습니다. .)

예 Xcode4 템플릿 생성기 : https://github.com/MrGando/Xcode-4-Template-Generator/blob/master/template_generator.py

참고 template_generator.py 실험 공유 빌드 설정을 가지고 있습니다. 선택적으로 공유 된 (부분적으로 공유 된) 설정이 필요합니다. 또한 main()의 NSAutoreleasePool을 매크로 대체를 사용하여 @autorelease 블록으로 변경하거나 두 번째 main.m 파일을 제공하여 변경하는 것이 바람직합니다.

+0

예, 저는 제 자신의 프로젝트를 위해이 솔루션으로 옮겼습니다. 그러나 템플릿 마법사를 사용하면 프로그래머가 "레거시"가 아닌 ARC 코드와 템플릿 코드 자체의 기존 상용구에 대해 최소한의 고민으로 ARC를 사용할지 여부를 선택할 수 있습니다. – mda

+0

모두 좋은 코멘트를 남겼습니다. 실제로 GCC는 -fno-objc-arc 옵션 (Apple-LLVM/clang 컴파일러 만 해당)을 지원하지 않기 때문에 실제로 ARC 마이그레이션은 수동 프로세스로 계속 진행될 것이고 템플릿은 오래 걸릴 수 있으므로 따라 잡다. 나는 하나 이상의 프로젝트에서 ARC로 성공적으로 이전했으며, 그리 어렵지 않습니다. 내 Xcode 리팩토링 도구 위시리스트에 있습니다. 더 높은 사회자는 누군가가 철저한 하우투를 추가하기를 원하지 않는 한이 질문을 닫을 수 있습니다. – mda

답변

1

컴파일 소스 목록에서 여러 파일을 선택하고 Enter> Paste> Enter를 눌러 모두에 -fno-objc-arc 태그를 동시에 적용 할 수 있습니다.

+0

사실, 플래그가 이미 존재하는 경우 덮어 씁니다. 모두 동일하다면 이것은 훌륭하게 작동합니다. – mda

3

아니요. 어려운 방법입니다.이 MRC 소스에 대한 정적 라이브러리 타겟을 생성하기 만하면됩니다 (아직 존재하지 않는 경우 타사 라이브러리 임). 그런 다음 적절한 빌드를 설정하십시오 타겟 당 설정. 그런 다음 라이브러리를 최종 실행 파일과 링크하십시오.

+0

두 가지 질문 : A) 라이브러리가 변경 될 때마다 정적 대상을 재구성해야합니까? B) 해당 타겟 내의 각 파일에 대해 -fno-objc-arc를 추가해야합니까, 아니면 모두에게 적용 할 수 있습니까? 참조 된 ARC 릴리스 노트로의 전환에는이 구성에 대한 언급이 없습니다. 옵션을 각 파일에 대해 개별적으로 지정해야한다고 명시합니다. – mda

+0

예제 하우투/튜토리얼 (또는 링크)을 제공하고 ARC를 켜거나 끄는 과정을 단순화한다면, 나는 (또는 첫 번째 응답자에게 :-) 승인 된 상징 (!)을 줄 것이다. – mda

+0

@mda) 당신은 단지 당신이 링크하는 라이브러리로서 타겟을 설정한다. - 그걸 사용하는 모든 클라이언트/앱은 그 라이브러리에 링크한다. 그들은 같은 표적을 가리킬 것입니다. 어떤 재구성도 없다 (그러나 누군가는 컴파일하기 위해 모든 소스를 추가 할 필요가있다).사용자가 사용하는 라이브러리는 사용자의 편의를 위해 이미이 정적 라이브러리/프로젝트를 제공 할 수 있습니다. b) 아니오. MRC를 사용하는이 라이브러리의 대상 레벨에서 플래그를 설정하기 만하면됩니다. 지배적 인 수준에서 빌드 설정이 무시되거나 컴파일러에 충돌 플래그를 전달한 경우가 아니면 소스가 설정을 상속합니다. – justin

관련 문제