アプリ開発と実行(iOS)

アプリ開発環境設定

iOS用アプリはXcode、iOS SDKを利用して開発します。Xcode、iOS SDKは、Windows系のPC以外のMacのみ駆動します。そして、Xcodeをダウンロードしてアプリを生成し、テストを行うためには、Apple開発者アカウントが必要です。

iOSアプリの開発環境は、基本的に下記のような手順で構成され、詳細については、開発者サイトのアップデートに応じて変更されることがあります。

  1. 開発者アカウント登録

  2. Xcode、iOS SDKインストール

  3. 配布時に必要な作業

開発者アカウント登録

Appleアカウントさえあれば、開発者ライセンスを個別に発行を受けなくてもアカウント登録だけでXcodeをダウンロードしたり、他の無料で提供されるサービスを利用することができます。そしてiOSでは、シミュレータを使用してテストを行うことができます。

シミュレータを使用する場合、別の認証手続きは必要ありませんが、端末を接続する場合には、追加の認証手続きが必要なので、開発者ライセンスを取得してください。

Appleアカウント生成

開発者アカウントを登録するためには、まずAppleアカウントが必要です。開発者アカウントを別に作成するのではなく、既に作成されたAppleアカウントを開発者アカウントとして登録します。

新しいAppleアカウントは、下記のリンクから生成できます。登録時に使用する電子メールアカウントをIDとして使用します。既存に使用しているAppleアカウントがある場合、該当手順はスキップします。

https://developer.apple.com/account/

開発者ライセンス認証

端末接続せずにシミュレーションでのみテストを実施したい場合、下記のリンクからAppleアカウントを開発者アカウントに登録することができます。

https://developer.apple.com/register

開発、テスト、配備に必要なサービスを受けるには、iOSデベロッパプログラムに参加する必要があります。1年単位で登録することができ、別途の費用が発生します。提供されるサービスについては、下記のリンクを参照してください。

https://developer.apple.com/programs/

画面の上部にあるEnrollボタンをクリックすると、登録プロセスが開始されます。開発者アカウントは、個人/会社名義で登録することができます。

apple_developer_program_page

会社名義で登録する場合には、DUNS番号が必要です。DUNS番号は、世界中の企業を管理する一種のコードです。Appleサイトから別途料金なしでDUNS番号を発行することができます。発行処理を完了するためには、お申し込み後に発行代理店で、有線で必要な書類を要求し、該当書類を渡す必要があります。

https://developer.apple.com/ios/enroll/dunsLookupForm.action

https://developer.apple.com/support/D-U-N-S/

アカウントが登録されると、Appleの担当者がお申し込み内容を確認して有線で確認します。他の問題がなければ、登録完了メールに含まれているリンクに移動してライセンスに同意することで、ストアから1年間の開発者アカウントを購入することができます。

購入段階まで完了したら、電子メールでアクティベーションコード(Activation code)が配信されて認証ページで該当コードを登録すると、すべての手続きが完了します。

iOS Dev Centerで、画面の右側にiOS Developer Programメニューが追加されているのを確認できます。

Xcode、iOS SDKインストール

Xcodeは、Macで使用する統合開発環境として、いくつかのツールが含まれています。すでにXcodeがインストールされていても、接続しようとする機器のiOS SDKのバージョンに応じて、サポートされるXcodeのバージョンが異なることがあり、必要な場合はアップデートする必要があります。

ダウンロードできる最新Xcodeのバージョンは、下記のリンクから確認できます。リンクを通さず、直接アプリストアからダウンロードすることもできます。Xcodeインストールファイルには、iOS SDKとMac SDKが含まれています。

https://developer.apple.com/xcode/

https://developer.apple.com/download/

xcode_download_page

もし他のバージョンのXcodeが必要な場合、下記のリンクからダウンロードすることができます。

https://developer.apple.com/download/more/

配布時に必要な作業

実際端末と接続してテストを実施するためには、いくつかの認証手続きが必要です。認証手続きのためには、デベロッパ プログラムに登録されている必要があります。

必要な作業と関連した内容は、下記のリンクを参照してください。

https://developer.apple.com/library/ios/documentation/IDEs/Conceptual/AppDistributionGuide/Introduction/Introduction.html

アプリプロジェクト開発

Xcodeにて、下記のような手順に応じてiOS用アプリプロジェクトを開発します。アプリプロジェクトを進行する前に、nexacro studioで作成されたアーカイブファイルは指定したパスに配置する必要があります。

プロジェクト生成

nexacro platformで開発されたアプリを入れるiOSプロジェクトを生成し、デフォルト環境を設定する必要があります。新しいプロジェクトは、下記のメニューから生成することができます。

File > New > Project

プロジェクト生成のためのテンプレート画面にて、「Single View App」項目を選択します。

project_new_01

Product Nameと必要な項目を指定して、[Next]ボタンをクリックします。オープンされたポップアップウィンドウにて、プロジェクトを生成する場所を指定して、「Create」ボタンをクリックすると、新しいプロジェクトが生成されます。

project_new_02_01

インストールされたXcodeのバージョンに応じて、プロジェクト生成方法が少しずつ異なります。

iPhone Xデバイスを使用する場合、上部と下部に余白が生じる現象を防止するためには、プロジェクトにLaunchScreenストーリーボードを追加する必要があります。

詳細については、下記のリンクを参照してください。

https://developer.apple.com/ios/update-apps-for-iphone-x/

https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/launch-screen/

iOSライブラリおよびフレームワークの設定

iOSで提供されるAPIを使用するために必要なライブラリとフレームワークを設定します。プロジェクトを選択して、TARGETS項目を選択すると、画面上部に「General」というタブを確認することができます。該当タブを選択すると、「Linked Frameworks and Libraries」項目が表示される場所でライブラリとフレームワークを追加します。

project_new_03_01

下部にある[+]ボタンをクリックして、下記のように19個の項目を追加します。

17.1.3.800以降のバージョンのnexacro platformのライブラリを利用する場合は、追加するライブラリを「libc++.tbd」ファイルのみに変更しました。

変更前に生成したプロジェクトの場合は、既存の設定項目は削除しなくても正常に動作します。

AddressBookUI.fremawork

AddressBook.fremawork

AudioToolbox.framework

AVFoundation.fremawork

CFNetwork.fremawork

CoreLocation.fremawork

MediaPlayer.fremawork

QuartzCore.fremawork

MobileCoreServices.framework

CoreMedia.framework

Security.framework

SystemConfiguration.framework

MessageUI.fremawork

CoreBluetooth.framework

UIKit.framework

libc++.tbd

libxml2.tbd

libz.1.2.5.tbd

libsqlite3.0.tbd

ライブラリやフレームワークを最初に追加した場合、Xcodeのプロジェクトナビゲータに自動的にFrameworksグループが生成されます。論理的に構成されたグループであるため、実際のプロジェクトのフォルダでは表示されません。

たまに、追加したライブラリとフレームワークが左のプロジェクトナビゲータでのみ表示されて、「Linked Frameworks and Libraries」には表示されないことがあります。そのままビルドするとエラーが発生しますので、欠落されたライブラリとフレームワークをProject Navigatorで「Linked Frameworks and Libraries」にドラッグ&ドロップで追加してください。

nexacro platformライブラリ設定

iOSプロジェクトでnexacro platformに最適化された環境を作るために追加で提供されるnexacro platformライブラリファイルを設定します。

nexacro platformライブラリは、圧縮ファイル形式で提供され、nexacro17.ios.framework.zipというファイル名で提供されます。提供されるファイルは、圧縮を解放して生成されたプロジェクトのFrameworksグループにドラッグします。

nexacro_library_추가_자름

リソース設定

アプリで使用するローディング画像、アイコン、メッセージ、レイアウトなどを設定するための手順です。進行中のプロジェクトに応じて変更して適用することができます。

画像設定

Xcodeのテンプレートで生成したプロジェクトには、リソースを管理するのに必要な空きアセットカタログ(Asset Catalog)が含まれます。ユーザーは必要に応じてアプリアイコン、ランチャー画像などをアセットカタログに登録して使用することができます。

iOSアプリで使用するアプリアイコンとランチスクリーン画像は、個別に設定することができ、事前に作成された画像をリンクすることができます。

画像設定時に必ず該当iOS端末に合わせて製作された画像を使用する必要があります。端末に合わないサイズの画像や仕様に適合していない属性を持つ画像を設定した場合、アプリのビルド時にエラーが発生して、正常に動作しません。


アイコンと画像の設定に関する詳細については、下記のAppleデベロッパサイトを参照してください。

https://developer.apple.com/ios/human-interface-guidelines/icons-and-images/image-size-and-resolution/

アイコンと画像の設定は、プロジェクト設定で行うことができます。プロジェクトを選択して、TARGETS項目を選択すると、画面上部に「General」というタブを確認することができます。該当タブを選択して、「App Icons and Launch Images」項目を確認します。

appicon_launch_image_설정_01

「App Icons Source」項目の横にある矢印をクリックすると、下図のようにアセットカタログからアプリのアイコンを設定することができます。予め製作したアイコン画像を端末と用途に合った位置にドラッグ&ドロップします。

appicon_launch_image_설정_02

「Launch Images Source」項目の横にある「Use Asset Catalog...」をクリックすると、下図のようにポップアップがオープンされます。テンプレートでプロジェクトを生成した場合、デフォルトアセットカタログがすでに生成されているので、Assetsを選択した後Migrateボタンをクリックします。

appicon_launch_image_설정_03

Migrationが実行されると、アセットカタログに新たに生成されたLaunchImage項目が表示されて、その隣に端末と用途に合わせて設定できる画面を確認することができます。予め製作したランチ画像を適切な位置にドラッグ&ドロップします。

appicon_launch_image_설정_05

メッセージ設定

アプリで使用するメッセージを別のファイルに保存した後、アプリを起動する時に該当ファイルを利用することができます。

新しいファイルを生成するには、プロジェクトフォルダを選択した後、コンテキストメニューから「New File」を選択します。

project_new_07

画面に表示されているテンプレートの中で、「Strings File」を選択します。

project_new_08

「Save As」にて、ファイル名を「Localizable」に入力します。

project_new_09

生成されたLocalizable.stringsファイルは下記のように変更します。

/* 
  Localizable.strings
  HelloiOS
*/
"needupdate" = "It needs an update.";
"loadingFail" = "First loading fails.  \r\nPlease restart.";
"updateFail" = "Update fails.  \r\nPlease restart.";
"notexist" = "Start file does NOT exist.  \r\nPlease restart.";
"BeingUpdated" = "Being updated.";
"wantreplace" = "There is a file of the same name. Do you want to replace? ";
"ok" = "OK";
"cancel" = "Cancel";
"move" = "Move";
"upper" = "Upper";
"filter" = "Filter";
"home" = "Home";
"nofilename" = "No File Name.";
"checkforupdates" = "Check for update.";
"installforupdates" = "Install update.";
"downloadingforupdates" = "Downloading update.";
"force_close" = "Update is Completed.";

Xcode画面の右側にあるUtilitiesウィンドウで「Localize...」ボタンをクリックして、言語を選択します。事前にプロジェクト設定にて言語を追加していない場合には、デフォルトで英語が選択されます。

Localization_01

英語以外の言語をサポートするには、[プロジェクト>Info>Localizations]にて[+]ボタンを押下して、他の言語を追加することができます。

Localization_02

Localizationの関連情報については、Appleデベロッパーサイトを参照してください。

https://developer.apple.com/library/content/documentation/MacOSX/Conceptual/BPInternational/Introduction/Introduction.html

Config設定

nexacro platformで提供される機能をアプリで使用できるようにnexacro_config.xmlファイルを設定します。アプリのアップデート、Notification、エラー情報処理などの機能を有効にすることができます。nexacro_config.xmlファイルは、ユーザーが直接生成する必要があり、[{Asset}>data]フォルダの下に配置します。このファイルは、Xcodeでアプリビルド時にプロジェクトに含まれている必要があります。

nexacro_config.xmlファイルが存在しない場合には、デフォルト設定が適用されるので、アプリの実行に何の問題がありません。

nexacro_config.xmlファイルはXML形式であり、下記の例のように作成します。

<?xml version="1.0" encoding="utf-8"?>
<nexacro-config>
  <application dialog-position="top" use-wkwebview="true" file-logging="true" />
  <notification enable="true" handler="DefaultNotificationManagerHandler"/>
  <updator force="false" cancelable="false" quiet="true" errormsg="true"/>
  <xpush-server request-missing-message="true" />
</nexacro-config>

nexacro_config.xmlに設定できる機能は、下記のとおりです。

機能

プロパティ

設定値

説明

application

dialog-position

"top" | "center" | "bottom"

アプリアップデートの進行情報を表示するポップアップの位置を設定します。

file-logging

"true" | "false"

ロードエラー情報をファイルに保存するかを設定します。

iTunesを介して、ログファイルを確認することができます。

updator

force

"true" | "false"

start_ios.jsonにアップデートファイルの情報が存在する場合、ポップアップで表示するかを設定します。

「true」に設定時、ポップアップ通知なしに強制的にアップデートを行います。

cancelable

"true" | "false"

アップデートファイルが存在する場合、ポップアップにアップデートの[キャンセル]ボタンを表示するかを設定します。

[キャンセル]ボタンをクリックすると、アップデートを行わずに、アプリを終了します。

errormsg

"true" | "false"

アプリのロードに失敗したときにエラー情報をポップアップで表示するかを設定します。

quiet

"true" | "false"

アップデートポップアップを表示するか設定します。

「true」に設定しても、アップデートファイルが存在する場合、進行ステータスが表示されます。

xpush-server

request-missing-message

"true" | "false"

xpushサーバー使用時、受信に失敗した信頼性の高いメッセージを自動的に要求するかを設定します。

notification

enable

"true" | "false"

通知機能を使用するかを設定します。

handler

"[クラス名]"

通知の受信時に処理するハンドラを実装したクラスを設定します。

デフォルト値は「DefaultNotificationManagerHandler」です。

ビルド環境設定

iOSプロジェクトを生成して、デフォルトで作成されたAppDelegate.h、AppDelegate.mファイルとmain.mファイルをnexacro platform環境に合わせて変更します。

AppDelegate.h

生成されたアプリのデリゲートがnexacro platform AppDelegateを継承するように変更します。ファイルを下記のように変更して、nexacro17.frameworkが動作できるようにします。

//
//  AppDelegate.h
//  HelloiOS
//

#import <UIKit/UIKit.h>
#import <nexacro17/NexacroAppDelegate.h>
#import <nexacro17/NexacroMainViewController.h>

@interface AppViewController : NexacroMainViewController
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation;
@end

@interface AppDelegate : NexacroAppDelegate <UIApplicationDelegate>
-(NexacroMainViewController*)initializeMainViewController;
@end

AppDelegate.m

AppDelegate.mファイルでは、nexacro studioで作成されたstart_ios.jsonファイルが配置されたサーバーのURLアドレスを指定します。下記のコードで太字で表示された部分をユーザーの環境に合わせて変更します。

//
//  AppDelegate.m
//  HelloiOS
//

#import "AppDelegate.h"

@implementation AppViewController
-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
    return [super shouldAutorotateToInterfaceOrientation:interfaceOrientation];
}
@end

@implementation AppDelegate
- (NexacroMainViewController*)initializeMainViewController
{
    NSString *bootstrapUrl = @"http://[URL]/start_ios.json";
    
    [[NexacroResourceManager sharedResourceManager] setBootstrapURL:bootstrapUrl isDirect:NO];
    AppViewController* controller = [[AppViewController alloc] initWithFullScreen:NO];
    
    return controller;
}
@end

main.m

UIApplicationMain関数は、UIKitフレームワークで提供されるデフォルト関数として、アプリの開始点です。アプリの実行に必要な事前準備をして、メインループをはじめてユーザーの入力を受ける準備をします。

main.mファイルが下記の内容であることを確認して、異なる場合には修正します。

//
//  main.m
//  HelloiOS
//

#import <UIKit/UIKit.h>
#import "AppDelegate.h"

int main(int argc, char * argv[]) {
    @autoreleasepool {
        return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));
    }
}

その他設定

「Build Settings」項目で、いくつかの設定を変更する必要があります。

Build Settings > Architectures > Build Active Architecture Only

Debug: No
Release: No
Build Settings > Apple LLVM 9.0 - Language - Object C > Objective-C Automatic Reference Counting

Yes

ネットワーク未接続状態でのアプリ起動方式の設定

17.1.0.300以降のバージョンではUpdate Typeの設定値がUpdate(Local+Server)である場合、ネットワークに接続していないとアプリを実行できません。アプリのロードーディング時にBootstrap URLを確認して接続に失敗すると、アプリを実行しません。

nexacro studioでアプリをパッキングする際にUpdate TypeをLocalやUpdate(Local+Server)に設定すると、ネットワーク接続がなくてもアプリを起動することができます。一般的にネットワーク接続が必要ない場合にはLocalタイプを使用しますが、ネットワークに接続している状態でアプリを起動した後にローカルファイルでアプリが動作する必要がある場合にはUpdate(Local+Server)タイプを使用することができます。このようにネットワーク接続が必要ないか、もしくは問題発生時にアプリ単独で起動可能にするためにはアプリのビルド時に、起動に必要なファイルをロードして配布する必要があります。

アプリを起動するために必要なファイルは、モジュール、ソース、リソース、およびRun.zipとstart_ios.jsonとして、nexacro studioでPacking(Archive&Update)を実行して取得できます。このファイルをXcodeプロジェクトでarchiveフォルダに積載した後、アプリをビルドすると、ネットワーク接続がなくてもアプリを起動することができます。

nexacro studioでPacking(Archive&Update)を実行する際にUpdate TypeをLocalに設定しても、XcodeプロジェクトのAppDelegate.mでブートストラップURLは必ず設定する必要があります。

例えば、下記のように仮想のアドレスや実際の使用していない任意のアドレスに設定しても構いません。

NSString *bootstrapUrl = @"http://192.168.0.1/_ios_/start_ios.json";

1

Finderでarchiveフォルダを生成し、モジュール、ソース、リソースファイルをコピーします。

Finderを実行した後、Xcodeプロジェクトパスの下位にarchiveフォルダを生成します。そして、nexacro studioで、Packing (Archive&Update)を実行して生成したファイルを下図のようにarchiveフォルダにコピーします。

01_Finder에_폴더생성및파일복사

2

Xcodeプロジェクトにarchiveフォルダを追加します。

Xcodeのプロジェクトエクスプローラの下部の「+」ボタンをクリックして、Add Files to"プロジェクト名"を選択します。

02_Xcode_파일추가

archiveフォルダを選択して、フォルダの追加オプションで「Create folder references」を選択した後、「Add」ボタンをクリックします。

03_Xcode_파일추가2

3

フォルダとファイルがプロジェクトに正常に追加されたことを確認します。

フォルダとファイルがプロジェクトに正常に追加された結果を確認します。

04_Xcode_확인

Xcodeのプロジェクトエクスプローラに表示されるフォルダは、黄色と青色で表示されます。黄色のフォルダは、Xcodeでプロジェクトの構成を表示するために存在する論理的なグループを表示し、実際には存在しません。青色のフォルダは、実在する物理的なフォルダを表示します。ビルドの実行時に黄色のフォルダのファイルは、アプリのルートディレクトリに含まれており、青色のフォルダのファイルは、フォルダ構造を維持したまま含まれます。

アプリテスト

iOS用端末をPCにUSBで接続してすぐにテストするか、シミュレータに接続してテストすることができます。端末を直接接続する場合には、端末に適切なプロファイルがインストールされている必要があります。

  1. Xcodeの上部のTarget Nameをクリックして、下記のようにアプリを実行するiOS用端末やシミュレータを選択します。

select_device_01

select_device_02_01

  1. Run機能を実行します。画面の上部のアイコンを直接クリックするか、Xcodeのメニューから実行することができます。

select_device_01

Product > Run

project_new_13_resize