iOS 모듈을 64bit 대응하는 방법

여러분 안녕하세요!
이 기사는 Appcelerator Titanium Advent Calendar 2015
20 일째입니다.

이와테에서 Titanium을 추진하고 있는 치이킷의 이토입니다. 20일에 기사가 늦지 않아. . .
위험하다 ~라고 생각하면, Titanium의 거인으로부터 재촉이 왔습니다 w



내년은 늦지 않고 쓰도록 하겠습니다! !
「자꾸자꾸, 퍼프 퍼프」는 뭔가 전 재료가 있는 것일까~? 라고 생각했습니다.

여러분이 오류를 본 적이 있습니까?





네! 모듈이 64bit 대응되어 있지 않을 때의 에러입니다.
이 에러라면 「 便小陳g. 네토 rk 」의 모듈이 64bit에 대응할 수 없어요! 라고 말합니다.
이번에는 모듈의 64bit 대응 방법을 쓰고 싶습니다. 굉장히 간단합니다만, 이외와 제대로 쓰고 있는 일본어의 기사는 적다고 생각했기 때문에 씁니다.

이번에는 「便小陳g. 네토 rk」의 모듈이 아직 대응되어 있지 않으므로, 이쪽으로 갑니다.
"便小陳g. 네토 rk"은 네트워크 정보를 얻기위한 모듈입니다.

64bit 대응 절차



우선은 「 便小陳g. 네토 rk 」를 클론하는 곳으로부터 합니다.
$ git clone https://github.com/benbahrenburg/TiNetworkHelpers.git

$ ls
README.md   iOSNetwork

$ cd iOSNetwork
$ ls
BencodingNetwork_Prefix.pch hooks
Classes             iosnetwork.xcodeproj
LICENSE             manifest
README.md           module.xcconfig
assets              platform
build.py            timodule.xml
dist                titanium.xcconfig
example

빌드 해 보자


$ ./build.py 
Build settings from command line:
    SDKROOT = iphoneos9.1

=== BUILD TARGET iosnetwork OF PROJECT iosnetwork WITH CONFIGURATION Release ===

Check dependencies

*
*
*

** BUILD SUCCEEDED **


마지막으로 BUILD SUCCEEDED가 표시되면 OK입니다.
현재 디렉토리에 bencoding.network-iphone-1.0.1.zip이 생성되었는지 생각합니다.

모듈을 사용해보십시오



프로젝트를 만들고 프로젝트 폴더 바로 아래에 모듈을 배치합니다.
$ appc ti create
Appcelerator Command-Line Interface, version 5.0.4
Copyright (c) 2014-2015, Appcelerator, Inc.  All Rights Reserved.

? project type:  app
? project name:  64bitModuleTest
? project id:  com.module.test

$ cd 64bitModuleTest
$ cp ../iOSNetwork/bencoding.network-iphone-1.0.1.zip .


tiapp.xml의 modules에 bencoding.network를 추가하고,
빌드합니다.
$ vim tiapp.xml

<modules>
  <module platform="commonjs">ti.cloud</module>
  <module platform="iphone" version="1.0.1">bencoding.network</module>
</modules>

컨트롤러에 모듈을 호출하는 기술을 합니다.
$ vim app/controller/index.js

var network = require('bencoding.network');
Ti.API.info("module is => " + network);

Ti.API.info("Create a new Carrier Info Object");
var carrier = network.createCarrier();
Ti.API.info("Call the findInfo method to return the carrier details");
var carrierInfo = carrier.findInfo();
Ti.API.info("Are we on the simulator? => " + carrierInfo.isSimulator);
Ti.API.info("Get carrier name => " + carrierInfo.carrierName);
Ti.API.info("Get mobile country code => " + carrierInfo.mobileCountryCode);
Ti.API.info("Get mobile network code => " + carrierInfo.mobileNetworkCode);
Ti.API.info("Get ISO country code for cellular service provider => " + carrierInfo.isoCountryCode);
Ti.API.info("Mobile service provider supports VOIP => " + carrierInfo.allowsVOIP);

빌드해 보겠습니다.
$ appc ti build -p ios
Appcelerator Command-Line Interface, version 5.0.4
Copyright (c) 2014-2015, Appcelerator, Inc.  All Rights Reserved.

오류가 발생합니다. 향후 버전 업되면 이 에러는 보이지 않게 되므로, 시험하고 싶은 분은 이하의 날짜까지의 커밋에 되돌려 받을 수 있다고 생각합니다.
※2015/12/23 시점
※최신 커밋 ID:fc310a3c11af0662a59e2eb569011e26b5cb8efa



모듈 수정



64bit에 대응시키기 위해 수정하겠습니다.

xcode에서 GUI로 조작 할 수 있지만,
파일 자체를 편집합니다.
project.pbxproj를 두 위치 아키텍처를 설정하는 부분이 있으므로 Xcode의 기본 아키텍처를 설정합니다. 7.1.1 이상이면 기본 설정이 64bit화된 것이 됩니다.
vim iOSNetwork/iosnetwork.xcodeproj/project.pbxproj


                        buildSettings = {
-                               "ARCHS[sdk=iphoneos*]" = (
-                                       armv6,
-                                       armv7,
-                               );
-                               "ARCHS[sdk=iphonesimulator*]" = "$(ARCHS_STANDARD)";
+                               ARCHS = "$(ARCHS_STANDARD)";
+                               "ARCHS[sdk=iphoneos*]" = "$(ARCHS_STANDARD)";
+                               "ARCHS[sdk=iphonesimulator*]" = "$(ARCHS_STANDARD)";



                        buildSettings = {
                                ALWAYS_SEARCH_USER_PATHS = NO;
-                               "ARCHS[sdk=iphoneos*]" = (
-                                       armv6,
-                                       armv7,
-                               );
-                               "ARCHS[sdk=iphonesimulator*]" = i386;
+                               ARCHS = "$(ARCHS_STANDARD)";
+                               "ARCHS[sdk=iphoneos*]" = "$(ARCHS_STANDARD)";
+                               "ARCHS[sdk=iphonesimulator*]" = "$(ARCHS_STANDARD)";


그런 다음 모듈 버전을 수정합니다.
vim iOSNetwork/manifest

-version: 1.0.1
+version: 1.0.2


다시 빌드하고 프로젝트 바로 아래에 배치합니다.
$ ./build.py 
$ cp bencoding.network-iphone-1.0.2.zip ../64bitModuleTest/

수정된 모듈로 빌드해 보기



tiapp.xml의 모듈 버전을 수정합니다.
$ vim tiapp.xml

-    <module platform="iphone" version="1.0.1">bencoding.network</module>
+    <module platform="iphone" version="1.0.2">bencoding.network</module>

드디어 준비가 되었으므로,
빌드합니다.
$ appc ti build -p ios
Appcelerator Command-Line Interface, version 5.0.4
Copyright (c) 2014-2015, Appcelerator, Inc.  All Rights Reserved.


네! 여러분 성공입니다.
오류 화면이 사라졌습니다.
64bit 대응할 수 있었습니다.



다음 로그는 모듈 기능을 사용한 로그입니다.
이쪽이 보이면 정상적으로 모듈도 움직인 것입니다.
-- Start simulator log -------------------------------------------------------
[INFO]  Application started
[INFO]  64bitModuleTest/1.0 (5.0.2.92c2265)
[INFO]  module is => [object bencoding.network]
[INFO]  Create a new Carrier Info Object
[INFO]  Call the findInfo method to return the carrier details
[INFO]  Are we on the simulator? => true
[INFO]  Get carrier name => simulator
[INFO]  Get mobile country code => unknown
[INFO]  Get mobile network code => unknown
[INFO]  Get ISO country code for cellular service provider => unknown
[INFO]  Mobile service provider supports VOIP => false


64bit 대응은 이외와 간단했습니다!
실은 풀릭으로 같은 대응이 오고 있으므로, 곧 이쪽의 모듈은 64bit 대응은 될까라고 생각합니다.

하지만! ! iOS의 이야기로 네트워크의 프레임워크가 움직이지 않게 되기도 하고 있기 때문에, 이번 모듈은 실은 Wifi의 SSID를 취득하기 위해서 사용하고 싶었습니다만,
실은 지금 그대로는 사용할 수 없습니다. .

Titanium에서 할 수있는 일을 늘리기 위해서도 iOS에 대해 더 공부하지 않으면 ~라고 생각하게되었습니다.

사이고에게



yagi-san 이것으로 크리스마스 개최할 수 있네요! !
Titanium 신년회 하고 싶습니다!
그리고 커뮤니티가 고조될 것을 산타에게 기도합니다.

좋은 웹페이지 즐겨찾기