Tag Archives: Universal

iOS Universal Framework 빌드하기

이 글은 [XCode 6 Framework 만들기] 의 내용을 보충하기 위해서 작성된 글입니다. 먼저 iOS의 Framework 만드는 방법에 대한 글을 숙지 하신 뒤에 이 글을 참고하시기 바랍니다.

기존에 작성 되었던 “XCode 6 Framework 만들기” 글은 일반적으로 다른 어플리케이션에서 사용 가능한 Framework를 만드는 방법에 대해 정리된 블로그 글이었습니다. 하지만 배포 가능한 형태의 Framework를 만들기 위해서는 몇가지 더 신경써야 할 부분이 있습니다. 그런 부분에 대해서 정리를 해보겠습니다.

ios_fat_framework_01

먼저 Build Settings 에서 위와 같이 설정이 되어있는지 확인하셔야 합니다. Valid Architectures 에는 지원하고자 하는 아키텍쳐를 선택해 주시면 되며 너무 많은 아키텍쳐를 선택하는 것은 Framework의 용량을 커지게 한다는 문제점을 가지고 있습니다.

ios_fat_framework_02

마찬가지로 Build Settings 혹은 General 설정에서 볼 수 있는 Deployment Target에 대해서 확인이 필요합니다. Bitcode를 정상적으로 지원하기 위해서는 최소 6.0 이상으로 설정하셔야 합니다.

ios_fat_framework_03

이 설정은 본인이 진행하시는 프로젝트의 상황에 맞게 설정하시면 됩니다. 기본적으로 Dynamic Library로 설정이 되어있으며 이는 Framework가 어플리케이션의 런타임에 링크되어 실행된다는 것을 의미합니다. 추가로 위에서 보여지는 Static Library의 경우에는 어플리케이션의 컴파일 시점에 링크되어 함께 컴파일됩니다. 하지만 Static Library는 이미지와 같은 리소스 파일들을 포함할 수 없다는 문제가 있습니다. 주로 이미지를 담고 있는 Media Bundle 파일을 함께 제공하는 방법을 사용하고 있습니다.

이제 Framework 프로젝트가 준비가 완료된 것 같습니다. 이제 다양한 아키텍쳐를 지원할 수 있도록 빌드를 수행해야 합니다. 다양한 방법이 있겠지만 저는 별도의 스크립트를 프로젝트의 루트에 두어 스크립트를 통해 빌드를 합니다. 제가 자주 사용하는 스크립트는 다음과 같습니다.

#!/bin/sh

SUPPORTED_PLATFORMS="iphoneos iphonesimulator"
PROJECT_NAME="HelloFramework"
CONFIGURATION="Release"
#CONFIGURATION="Debug"
CURRENT_WORKING_DIR=`pwd`
BUILD_DIR="${CURRENT_WORKING_DIR}/build"

for PLATFORM in $SUPPORTED_PLATFORMS; do
  xcodebuild -target "${PROJECT_NAME}" -configuration "${CONFIGURATION}" -sdk "${PLATFORM}" \
    ENABLE_BITCODE=YES ONLY_ACTIVE_ARCH=NO BUILD_DIR="${BUILD_DIR}" CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO clean build
done

cp -R "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework" "${BUILD_DIR}/"

lipo -create -output "${BUILD_DIR}/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
  "${BUILD_DIR}/${CONFIGURATION}-iphoneos/${PROJECT_NAME}.framework/${PROJECT_NAME}" \
  "${BUILD_DIR}/${CONFIGURATION}-iphonesimulator/${PROJECT_NAME}.framework/${PROJECT_NAME}"

echo "Fat Framework Built : ${BUILD_DIR}/${PROJECT_NAME}.framework"

이제 만들어진 스크립트를 실행해 보겠습니다.

...

Touch build/Release-iphonesimulator/HelloFramework.framework
    cd /Users/theeye/HelloFramework
    export PATH="/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Applications/Xcode.app/Contents/Developer/usr/bin:/usr/local/bin::/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/share/dotnet:/Library/Frameworks/Mono.framework/Versions/Current/Commands"
    /usr/bin/touch -c /Users/theeye/HelloFramework/build/Release-iphonesimulator/HelloFramework.framework

** BUILD SUCCEEDED **

Fat Framework Built : /Users/theeye/HelloFramework/build/HelloFramework.framework

정상적으로 빌드가 되었는지 확인을 해보겠습니다.

$ cd cd build/HelloFramework.framework/
$ lipo -info HelloFramework 
Architectures in the fat file: HelloFramework are: armv7 i386 x86_64 arm64

다양한 아키텍쳐가 포함된 Universal(Fat) Framework 가 만들어진것을 확인할 수 있습니다.

참고용 Framework 프로젝트 : HelloFramework_UniversalFramework

아이폰4 범퍼 장착후에도 사용가능한 유니버셜독 개조하기

사용자 삽입 이미지
저에게는 자그마치 6만9천원이라는 거금을 들여서 구매한 유니버셜독이 있습니다. 그리고 이번에 3GS에서 아이폰4로 갈아타는 행위(?)를 벌였습니다. 그런데 이게 무슨일이란 말입니까… 공짜로 받아온 정품 범퍼를 장착했더니 정품유니버셜독에 꼽을수 있는 방법이 없더군요. 애플은 항상 정품 악세서리에 어떤 불편함을 주어서 다른 악세서리 회사들의 매출을 올릴수 있는 방법을 고려하는것만 같습니다ㅠㅠ

그래서 고민하던중에 독 어댑터중 하나를 이용하여 아이폰4에 딱 들어맞는 유니버셜 독을 만들어 보기로 하였습니다. 지금부터 적을 말들은 하나같이 쉬운 내용인데 막상 해보면 힘듭니다..저도 완성할때쯤엔 바닥의 신문지가 땀으로 젖었다는…ㄷㄷㄷ

사용자 삽입 이미지철물점에 들러 위의 준비물을 준비합시다. 물론 (1)은 철물점에서 파는것이 아닙니다. (2)은 쇠톱으로써 천원입니다. 옆의 사포(3)은 600원을 주었습니다. 총 들인 비용은 1,600원이 되겠습니다.

사용자 삽입 이미지위에서 보았던 유니버셜독 어댑터는 9호입니다. 저 위치에 9라고 써있습니다. 유니버셜독을 구매하면 다양한 어댑터가 이미 들어있는데요 그중에 가장 큰 홈입니다. 아마도 아이팟 클래식 용인듯 합니다.

사용자 삽입 이미지이제 아래쪽을 톱을 썰어냅니다. 이거 생각보다 둥글둥글해서 잘라내기 힘듭니다.

사용자 삽입 이미지자르실때 유의하실점은 위의 숫자가 적힌 부분들을 잘라서는 안된다는 것입니다. 위의 사진은 흔들려서 잘 안보이지만 (2)와 (3)에 유니버셜독에 고정되기 위한 홈이 나와있습니다. 거기만 딱 살아남을 정도로 잘라내시면 됩니다.

사용자 삽입 이미지결과적으로 위와 같은 모습을 가지게 됩니다. 여기서는 홈이 좀 보이네요. 위와 아래의 저 3개의 홈들이 멀쩡히 살아있어야 합니다. 그리고 나머지는 최대한 깎아내셔야 합니다. 물론 적당히 톱질한 다음에 사포질을 꾸준히 하시면 되겠습니다.

사용자 삽입 이미지완성이 되면 대충 이정도의 느낌입니다. 아래쪽정도는 쑥 들어갈 정도가 되면 완성이라고 보시면 되겠습니다.

사용자 삽입 이미지이제 유니버셜독에 장착해 보았습니다. 장착후에 떨어지지 않고 잘 붙어있으면 성공입니다. 여기에 아이폰4를 꼽아보시면 잘 장착이 됩니다. 장착화면은 젤 처음 화면에 있으니 참고하시면 되겠네요. 그런데 아주 작은 문제점은 아이폰4를 껴두시면 독과 직접적으로 맞닫는 부분이 살짝 찍히곤 합니다. 물론 범퍼의 고무부분인데요. 계속 써보니 별로 신경쓸만한 부분은 아닙니다. 빼서 가지고 다니면 금세 원상복귀 되더군요.

이런 눈에 잘 띄지도 않는 찍히는 자국에 민감하신분이라면 이 시도는 안하시는게 좋겠습니다.

결과적으로는 아주 대 만족입니다. 유니버셜독을 팔아야 하나 고민중이었는데 아주 좋네요 -_-b