목차

공통 : 모바일 OS

아이폰 해상도

GM에서 제안하는 가이드에 의하면 가장 큰 해상도로 시작하는게 좋다고 한다. 테스트 결과,

안드로이드

아직..

프로그래밍 유의 사항

스프라이트 파일명

편집기의 다국지원에 대해서

폰트 내장 방법

스피드

  1. pc에서 보는 움직이는 속도와 아이폰에서 느낌은 좀 다르다.
  2. 기본 속도를 4이상 잡아야 빠르게 움직이는 느낌이 난다.
    1. 프레임률과 룸의 스피드는 개념이 다르다.
  3. ip4에서는 4 –> 해상도가 세로로 960이나 되다 보니 프레임당 2,3픽셀 움직이는건 거의 안움직이는 것 처럼 보인다.

간단한 파티클

마우스

set gravity

/// 특정 오브젝트에 살짝 튀었다가 떨어지는 것을 설정
// 오브젝트 생성시 : 살짝 위로 가도록 생성, 생성하는 CreateObject 이벤트에 코드로 추가
direction = random_range( 70, 110 );
speed = 3;
/// 'Set the gravity' 액션을 추가
direction = 270 // 다른 direction 과 방향이 같다. ( 0 : right, 90 : up, 180 : left, 270 : down )
gravity = 0.2   // 숫자는 임의 입력이 가능하니 여러 숫자로 테스트. 
// 0.01도(아주 작은 수) 입력 가능. 
// 숫자가 커지면 더 빨리 떨어진다.
// check 'Relative' 중력 방향이 연결된 오브젝트에 영향을 받아 direction 값이 상대적으로 달라진다. 일반적으로 쓰려면 off.

룸(room)

배경 사이에 스프라이트 그리기

오브젝트를 제어하는 오브젝트

디자인 유의 사항

로고 사이즈 : iPhone

Splash Screen 사이즈가 너무 크면, 앱이 초기화 되지도 못하고 바로 죽어버린다.아직 적당한 사이즈를 모르겠다.

매뉴얼에는 첫번째 방과 같은 크기를 가져야 한다고 한다. ( 테스트 필요 )

GM 폰트는

이미지

스프라이트

배경이미지

사운드

효과음 mp3 내장

iPhone

iOS provisioning Portal

포탈 사이트

개발용 인증서 설정하기

App ID 추가

  1. 사용할 앱 이름으로 App ID 추가 : 영문
  2. description : 앱 영문 이름으로 추가. 대충 엉성한걸로 달면 계속 맘 상함.
  3. bundle Seed ID : Use Team ID 선택. 다른 AppID를 선택할 수 있는데 의미를 아직 모름.
  4. bundle Identifier : com.domainname.appname 형식으로 작성
  5. 길지만 AppID가 발급된다.

Provisioning 추가

Development 탭

  1. Development 탭에서 'New Profile' 선택
  2. Profile name : 같은 앱이어도 개발탭과 배포탭에 같은 이름으로는 안되는 것 같다.
  3. Certificates : 인증된 개발자 선택. ( 여러명 등록된 것은 미경험 )
  4. App ID : 앱 이름과 같은 app id 선택.
  5. Devices : 적용할 기기 선택. 포탈의 'Devices' 에 등록된 기기가 나온다.

Distribution 탭

  1. Distribution Method : 'Ad Hoc' 선택. App Store는 미경험.
  2. Profile Name : 앱 이름과 맞춰 쓰는게 알아보기 편함.
  3. App ID : 앱 이름에 맞춰 만들어둔 App ID 선택
  4. Devices : 옵션이라는데?
  5. 하여튼 발급.

Adhoc로 배포하는 것

용도

AdHoc용 인증서 작성

Ad Hoc 인증서 작성시,

이렇게 해야 제대로 인증서가 작성 된다.

테스트용 기기 등록시

GameMaker에서 빌드

  1. Distribution - Ad Hoc 으로 생성.
  2. Distribution - Ad Hoc 으로 만들 때, “Profile Name” 에 쓰는 이름에 공백을 넣지 말것.
    1. Profile Name : New App –> (x)
    2. Profile Name : NewApp –> (o)
  3. 이 인증서를 가져오면 완성이 가능하다.

iPhone 배포

TestFlightApp를 사용 방법

  1. 본인 계정 추가 : test flight로 가입하기
  2. 테스트할 사람의 계정 추가하고 초대하기
  3. 테스트 기기의 UUID 수집
  4. 추가된 UUID로 Privision 갱신하고 인증서 재발급
  5. 재발급된 인증서로 프로그램 재 컴파일

TestFlightApp : 성공한 설정 정리

업데이트 ( 드디어 한번 성공, 다음에도 될 것인가? )

iOS Provisioning Portal

  1. App IDs, 앱 아이디 생성할때
    1. Description : 공백이 없어야 하는가 싶어서 짧고 공백 없는 걸로.
      사용한 예 –> okifli2
    2. Bundle Seed ID (App ID Prefix) : 'Use Team ID' 대신, 눈에 보이는 'FN…9'와 같이 10자리 값 선택
    3. Bundle Identifier (App ID Suffix) : posfix : com.arario.kieuns 와 같이 정확하게 작성.
  2. Provisioning, 추가
    1. 'Distribution' 탭 선택
    2. 'New Profile'로 새 프로파일 작성
  3. Provisioning –> 'New Profile'
    1. Distribution Method : Ad Hoc 선택
    2. Profile name : 공백없이 붙여서 이름을 짓는다. (사용한 예 –> okifliadhoc)
    3. Distribution Certificate : 고정이므로 패스
    4. App ID : 아까 만든 App ID 선택 ( 예 –> okifli2 )
    5. Devices (optional) : 테스트할 사람 전부 선택.

새로 만든 인증서,프로비져닝 다운로드

  1. XCode 실행
  2. Organizer실행 : 메뉴의 'Window' –> 'Organizer' 실행
  3. Devices 탭 선택
  4. LIBRARY –> Provisioning Profiles 선택
  5. 오른쪽 하단 메뉴의 Refresh 클릭
  6. 애플 아이디로 로그인
  7. 인터넷에서 새로 다운로드(갱신) 받는다.
  8. 새로 추가한 Provisioning 파일이 있는지 확인한다.
  9. iPhone 구성 유틸리티에서도 보이는지 한번 확인.

개발용 맥의 설정, 관련 있는지 애매

  1. Application Oven : 기존 것을 삭제하고, 새로 설치하게 해서 지금 사용하는 GameMaker와 같은 버젼인지 확인한다.
    App Oven은 영문에서만 제대로 동작한다.
  2. Certificate : iPhone Distribution
  3. Provisioning : 'okifliadhoc - FN…9.com.arario.kieuns' 처럼 제대로 보여야 한다.
  4. App Id : 'com.arario.kieuns', 자동으로 설정 된다.

GameMaker 설정 --> Global Game Settings

  1. iOS 탭
  2. General
    1. Version Information –> Display name : okifliadhoc, Provisioning의 Profile Name과 맞춰보았다.
    2. Version : 자동이니까 패스, 이번에는 새로 시작하는 기분으로 1.0.0으로 설정
    3. App ID : Bundle Identifier (App ID Suffix)와 같은 값을 적었다. ( –> com.arario.kieuns )
    4. Devices : iPhone or iPod Touch로 선택. Both 항목을 선택하면 안되는건가???
  3. Provisioning
    1. Provisioning : 'okifliadhoc - com.arario.kieuns' 로 선택, 위에서 만든 Provisioning 파일로 선택했다.(당연히)
    2. Certificate : 'iPhone Distrubution' 으로 선택

++++ 성공한 컴파일 결과 로그 |

Saving IFF file... C:\temp\gm_ttt_97676\gm_ttt_42933\okinawaflight-Default-1.0.0.zip
Writing Chunk... GEN8
Writing Chunk... OPTN
Writing Chunk... EXTN
Writing Chunk... SOND
Writing Chunk... SPRT
Writing Chunk... BGND
Writing Chunk... PATH
Writing Chunk... SCPT
Writing Chunk... FONT
Writing Chunk... TMLN
Writing Chunk... OBJT
Writing Chunk... ROOM
Writing Chunk... DAFL
Writing Chunk... TPAGE
Writing Chunk... CODE
Writing Chunk... VARI
Writing Chunk... FUNC
Writing Chunk... STRG
Writing Chunk... TXTR
0 Compressing texture... writing texture texture_0.png... 
Writing Chunk... AUDO
Writing Chunk... SCPT
Writing Chunk... DBGI
Writing Chunk... STRG
Hello World
Done
2012-11-08 19:42:26.195 Application Oven[19564:100b] Temporary directory is /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N
2012-11-08 19:42:26.196 Application Oven[19564:100b] /usr/bin/unzip -qq /Applications/GameMaker-Studio/okinawaflight-Default-1.0.0.zip -d /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/GMSzip
2012-11-08 19:42:26.202 Application Oven[19564:100b] /usr/bin/unzip -qq /Applications/GameMaker-Studio/Application Oven.app/Contents/Resources/com.yoyogames.yoyorunner.ipa -d /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner
2012-11-08 19:42:26.316 Application Oven[19564:100b] /usr/bin/codesign -d --entitlements :/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/none_Adhoc_iPhone_iPad_622.app
Executable=/private/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/none_Adhoc_iPhone_iPad_622.app/YoYo_Runner
2012-11-08 19:42:26.346 Application Oven[19564:100b] /usr/bin/security cms -D -i /Users/arario/Library/MobileDevice/Provisioning Profiles/D5C1A07C-70DD-40B1-86C9-415A764295DE.mobileprovision
2012-11-08 19:42:26.388 Application Oven[19564:100b] Embedded provision=/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Embedded.plist
2012-11-08 19:42:26.389 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Print ApplicationIdentifierPrefix:0 /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Embedded.plist
2012-11-08 19:42:26.393 Application Oven[19564:100b] FN4E9E2MB9
2012-11-08 19:42:26.393 Application Oven[19564:100b] AppId Prefix=FN4E9E2MB9
2012-11-08 19:42:26.397 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleIdentifier "com.arario.kieuns" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.402 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :application-identifier "FN4E9E2MB9.com.arario.kieuns" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist
2012-11-08 19:42:26.407 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :keychain-access-groups:0 "FN4E9E2MB9.com.arario.kieuns" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist
2012-11-08 19:42:26.412 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Delete :UIDeviceFamily /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.417 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UIDeviceFamily array /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.421 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UIDeviceFamily:0 integer  1 /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.426 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Delete :UISupportedInterfaceOrientations /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.430 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UISupportedInterfaceOrientations array /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.435 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Delete :UIInterfaceOrientation /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
Delete: Entry, ":UIInterfaceOrientation", Does Not Exist
2012-11-08 19:42:26.439 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UISupportedInterfaceOrientations:0 string "UIInterfaceOrientationPortrait" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.444 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UISupportedInterfaceOrientations:1 string "UIInterfaceOrientationPortraitUpsideDown" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.449 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :UIInterfaceOrientation string "UIInterfaceOrientationPortrait" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.453 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleShortVersionString "1.0.0" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
Set: Entry, ":CFBundleShortVersionString", Does Not Exist
2012-11-08 19:42:26.458 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleVersion "1.0.0" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.462 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleDisplayName "okifliadhoc" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.467 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :CFBundleExecutable "okifliadhoc" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.472 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Add :YYIAPSandbox string  "false" /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/Info.plist
2012-11-08 19:42:26.478 Application Oven[19564:100b] /usr/bin/security unlock-keychain -p 1234
2012-11-08 19:42:26.492 Application Oven[19564:100b] /usr/libexec/PlistBuddy -c Set :get-task-allow NO /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist
2012-11-08 19:42:26.497 Application Oven[19564:100b] /usr/bin/codesign -f --preserve-metadata -s iPhone Distribution --resource-rules=/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app/ResourceRules.plist --entitlements=/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Entitlements.plist /var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app
/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app: replacing invalid existing signature
2012-11-08 19:42:26.777 Application Oven[19564:100b] /usr/bin/xcode-select -print-path
2012-11-08 19:42:26.780 Application Oven[19564:100b] /Applications/Xcode.app/Contents/Developer
2012-11-08 19:42:26.781 Application Oven[19564:100b] /bin/sh -c /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/PackageApplication "/var/folders/r6/kmv6rp011wz48_m1qz3yfrzw0000gn/T/App-Oven.DuQS7N/runner/Payload/okifliadhoc.app" -o "/Users/arario/GameMaker-Studio/okinawaflight/okifliadhoc.ipa"

++++

인증서 Provisioning 배포

  1. 메일로 보내도 되겠지만, 웹서버를 준비해서 웹에서 다운받을 수 있게 하면 바로 설치가 가능.
  2. 그러니, 다운로드 url을 전송.

마지막 업로드

  1. 컴파일 후에는, TestFlightApp.com에 업로드.
  2. 빌드 업로드 후에는, Provisioning 파일도 TestFlightApp.com 같이 올려야 다운로드가 가능하다.
    1. 위치는 'Builds' 클릭 후 이동 –> 업로드 한 빌드 선택
    2. 왼쪽 메뉴에서 'Permissions' 선택
    3. Provisioning 항목 부분 선택해서 파일 업로드.
  3. 본인 것에서 되는지 확인한다.