アプリ開発と実行(iOS/iPadOS)

アプリ開発環境設定

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

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

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

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

  3. 配布時に必要な作業

本章はXcode 12.5.1バージョンを基準に作成されました。

アプリプロジェクト開発

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

プロジェクト生成

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

File > New > Project

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

project_new_01

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

project_new_02_01

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

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

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

https://developer.apple.com/documentation/xcode/specifying-your-apps-launch-screen

https://developer.apple.com/design/human-interface-guidelines/launching#Launch-screens

iOSライブラリ/フレームワーク設定

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

project_new_03_01

下部にある[+]ボタンをクリックして、「libc++.tbd」項目を追加します。

nexacroライブラリ設定

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

nexacroライブラリは、圧縮ファイル形式で提供され、nexacro.framework.zipというファイル名で提供されます。「Frameworks, Libraries, and Embedded Content」項目から[+]ボタンをクリック>Add Files項目を選択し、nexacro.framework.zipファイルを選択します。提供されるファイルは、圧縮を解放して生成されたプロジェクトのFrameworksグループにドラッグします。

nexacro_library_추가_자름

リソース設定

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

画像設定

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

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

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


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

https://developer.apple.com/design/human-interface-guidelines/images#Resolution

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

appicon_launch_image_설정_01

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

appicon_launch_image_설정_02

メッセージ設定

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

新しいファイルを生成するには、プロジェクトフォルダを選択した後、メニューから [File > 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で提供される機能をアプリで使用できるように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" failpass="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」に設定しても、アップデートファイルが存在する場合、進行ステータスが表示されます。

failpass

"true" | "false"

アップデートエラーを無視するかどうかを設定します。

xpush-server

request-missing-message

"true" | "false"

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

notification

enable

"true" | "false"

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

handler

"[クラス名]"

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

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

ビルド環境設定

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

AppDelegate.h

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

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

#import <UIKit/UIKit.h>
#import <nexacro/NexacroAppDelegate.h>
#import <nexacro/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"
#import <nexacro/NexacroWKWebViewDelegate.h>

@interface WebViewDelegate : NexacroWKWebViewDelegate
@end

@implementation AppViewController

// 画面の向きの自動変更有無 (return: YES|NO)
- (BOOL)shouldAutorotate
{
    return YES;
}

// 画面の向きのサポート有無を確認 (return: 向きのビット値が設定されたフラグ)
- (UIInterfaceOrientationMask)supportedInterfaceOrientations
{
    return UIInterfaceOrientationMaskAll;
}

@end

@implementation AppDelegate
    
- (NexacroMainViewController*)initializeMainViewController
{
    NSString *bootstrapUrl = @"http://[URL]/start_ios.json";

    [[NexacroResourceManager sharedResourceManager] setBootstrapURL:bootstrapUrl isDirect:NO];
    
    // WKWebViewで発生するdelegateイベントが不要な場合の初期化
    // AppViewController* controller = [[AppViewController alloc] initWithFullScreen:NO];
    
    // WKWebViewで発生するdelegateイベントが必要な場合の初期化
    WebViewDelegate* webviewDelegate = [[WebViewDelegate alloc] init];
    AppViewController* controller = [[AppViewController alloc] initWithFullScreen:NO
                                                               andWebviewDelegate:webviewDelegate];

    return controller;
}
    
@end

// WKWebViewのdelegateイベントのためのAppViewControllerの初期化時に渡すインプリメンテーション
@implementation WebViewDelegate

#pragma mark - WKWebView - WKNavigationDelegate
- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation
{
    [super webView:webView didFinishNavigation:navigation];
    
    // コンテンツデータのロードが完了する時点
}
@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

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

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