iOS変換ガイド

このページでは、テスト・バリアントのUIKit要素を変更するために使用されるJSONマークアップについて説明します。この情報と、サイト作成から稼働公開までのアプリ・テスト(LINK)ガイドを組み合せて使用してiOS SDK(LINK)を統合していることが前提となっています。

ストア更新のないアプローチは、ネイティブ・アプリケーション用のA/Bテストを構築する方法の1つで、JSONマークアップを使用してユーザー・エクスペリエンスのバリアントをリモートでアプリにインジェクトします。このアプローチを使用すると、リリース・サイクルが後に続くアプリ内のコード変更ではなく、Maxymiserからキャンペーンやバリアントの更新を公開できます。一方、手動アプローチでは、アプリにコーディングされ、一般リリースを介してユーザーにリリースされるバリアントを使用します。この場合、Maxymiserは意思決定およびレポート・エンジンとして使用されます。

ストア更新のないアプローチは、iOS 8.0以降でのみサポートされています。iOS 7以前では、SDKでバリアント変換の適用やアクションのトラッキングは行われません。

iOSバージョン ストア更新なし 手動アプローチ
v8.x以降 サポート対象 サポート対象
v7.x サポートされていません(SDK非アクティブ) サポート対象
v6.x以前 サポートされていません(SDK非アクティブ) サポートされていません(SDK非アクティブ)

JSONスキーマ参照

{

"MMTApp": [

{

"scope": {

"device": ["iphone", "ipad"],

"orientation": ["landscape", "portrait"],

"scale": ["@1x", "@2x", "@3x"]

},

"config": [

{

"id": "DemoViewController/UIView[0]/UILabel[0]",

"props": {

"text": "Hello",

"background-color": "#008B7D"

}

},

{

"id": "DemoViewController/UIView[0]/UIButton[0]",

"props": {

"background-color": "#008B7D"

}

}

],

"constraints": {

"update": [

{

"item1": "DemoViewController/UIView/UIButton",

"attribute1": "Top",

"relation": "Equal",

"item2": "DemoViewController/UIView/UITextView",

"attribute2": "Bottom",

"priority": 1000,

"multiplier": 1.0,

"values": {

"constant": 100

}

}

]

},

"actions": [

{

"id": "DemoViewController/UIView/UIButton",

"type": "TouchUpInside",

"name": "Click_through"

}

]

}

]

}

要素ID

IDは、画面上のUI要素を選択するために使用します。IDは、ViewControllerのルート・ビューから始まるUI要素へのパスです。たとえば、

"id": "DemoViewController/UIView[0]/UIButton[1]"

は、DemoViewControllerのルート・ビューの最初のUIView上にある2番目のButtonのIDです。デフォルトでは、DemoViewControllerのルート・ビューには、コントローラのクラス名と同じIDがあります。

コードからUI要素にカスタムIDを割り当てることができます。これにより、正確なコンテキストに応じて要素をターゲットにできます。次の例では、"Product-123" IDをProductDetailsViewControllerのルート・ビューに設定します。

これにより、特定の製品のProductDetailsViewControllerのUI要素をターゲットにすることができます。

"id": "Product-123/UIButton[0]"

ノート: カスタムIDは自動生成されたIDをオーバーライドしないため、キャンペーンでカスタムIDと自動生成されたIDの両方を使用できます。

すべてのUI要素のIDを画面に表示するには、要素IDの出力を有効にしてこのページにナビゲートします。

[MMTApp setPrintElementsIDs:YES];

SDKによってすべての要素IDがアプリケーション・ログに出力されます。

スコープ

スコープは、様々なデバイス構成に対する様々な変換またはアクションの使用を許可するオプションのブロックです。構成は、デバイス・タイプ、向き、スケールなどのパラメータのセットです。

スコープには、様々なスコープ・パラメータを定義するオブジェクトが含まれています。

"device"は、変換が適用されるデバイスの列挙です。使用可能な値は次のとおりです

  • "iphone"
  • "ipad"

たとえば、列挙に"iphone"のみが含まれている場合、このスコープの変換はiPhoneにのみ適用されます。

"device"が明示的に設定されていない場合は、["iphone", "ipad"]とみなされ、すべてのデバイスが含まれます。

"orientation"は、変換が適用される向きの列挙です。使用可能な値は次のとおりです

  • "landscape"
  • "portrait"

たとえば、列挙に"landscape"のみが含まれている場合、このスコープにおける変換は向きが横方向に変更された場合にのみ適用されます。

"orientation"が明示的に設定されていない場合は、["landscape", "portrait"]とみなされ、すべての向きが含まれます。

重要: 特定のスコープに対して適用された変換は、向きが変更されてもロールバックされません。そのため、必ず両方の向きについて変換を記述してください。

"scale"は、変換が適用される画面スケールの列挙です。使用可能な値は次のとおりです

  • Retina以外の画面の場合は"@1x"
  • Retina画面の場合は"@2x"(Retina画面のiPhone 4-5s、iPads)
  • iPhone 6 Plus画面の場合は"@3x"

たとえば、列挙に"@3x"のみが含まれている場合、このスコープにおける変換はiPhone 6 Plusにのみ適用されます

"scale"が明示的に設定されていない場合は、["@1x", "@2x", "@3x"]とみなされ、すべてのスケールが含まれます。

制約

Constraintsブロックでは、変更する制約を記述します。

変更する制約を選択するには、次のプロパティを指定する必要があります。

  • "item1 - 制約の最初の項目のID。順序は重要です。このオブジェクトは必須です。指定しなければ、変更は適用されません。"
  • "attribute1" - 最初の項目の属性。オブジェクトはオプションです。オブジェクトが存在しない場合、制約検索中は無視されます。属性名を含む文字列をパラメータとして受け取ります。使用可能な属性名は後述します。
  • "relation" - 2つの属性間の関係。オプション。パラメータは、関係名を含む文字列です。パラメータの使用可能なすべてのバリアントは後述します。
  • "item2" - 2番目の項目のID。このオブジェクトは、2番目の要素が含まれる場合のみ必須です。制約に要素が1つしか存在しない場合もあります。この場合、"item2"オブジェクトは省略できます。
  • "attribute2" - 2番目の項目の属性。オプション。
  • "priority" - 制約優先度。浮動小数点値をパラメータとして受け取ります。オプション。
  • "multiplier" - 制約乗数。浮動小数点値をパラメータとして受け取ります。オプション。
  • "constant" - 制約定数。浮動小数点値をパラメータとして受け取ります。オプション。

これらのプロパティでは、変更する制約を明示的に定義する必要があり、複数の制約が指定されたプロパティに一致する場合は更新されません。

"update"ブロックで、変更する値を指定します。

現時点では"constant"プロパティのみがサポートされています。

"attribute1"または"attribute2"には、次の値を使用できます。

  • "left" - ビューの左側の座標(x)
  • "right" - ビューの右側の座標(x + width)
  • "top" - ビューの一番上の座標(y)
  • "bottom" - ビューの一番下の座標(y + height)
  • "leading" - インタフェースに依存し、英語の場合は"left"と等しく、アラビア語(またはその他のRTL言語)の場合は"right"と等しくなります
  • "trailing" - インタフェースに依存し、英語の場合は"right"と等しく、アラビア語(またはその他のRTL言語)の場合は"left"と等しくなります。
  • "width" - ビューの幅
  • "height" - ビューの高さ
  • "centerX" - X座標上のビューの中心
  • "centerY" - Y座標上のビューの中心
  • "baseline" - テキスト・ベースライン(複数行の場合は最後の行ベースライン)
  • "lastBaseline" - 前を参照
  • "firstBaseline" - テキスト・ベースライン(複数行の場合、最初の行ベースライン)
  • "leftMargin" - 左側のビュー・マージン
  • "rightMargin" - 右側のビュー・マージン
  • "topMargin" - 上側のビュー・マージン
  • "bottomMargin" - 下側のビュー・マージン
  • "leadingMargin" - インタフェースに依存し、英語の場合は"leftMargin"に等しく、アラビア語(またはその他のRTL言語)の場合は"rightMargin"に等しくなります
  • "trailingMargin" - インタフェースに依存し、英語の場合は"rightMargin"に等しく、アラビア語(またはその他のRTL言語)の場合は"leftMargin"に等しくなります
  • "centerXWithinMargins" - マージンを考慮したビューのX中心
  • "centerYWithinMargins" - マージンを考慮したビューのY中心
  • "notAnAttribute" - 予約済キーワード。存在しない場合(および2番目のビューがnilの場合)は2番目の属性として使用されます

次の値は"relation"に使用できます。

  • "lessThanOrEqual"
  • "equal"
  • "greaterThanOrEqual"

Actions

各アクションには、次のパラメータが必要です。

  • "id" - アクションのトラッキングに使用される要素のID
  • "type" - アクションのタイプ
  • "name" - Maxymiserでのアクションの名前

現在、次のアクション・タイプを使用できます。

  • "ElementView" - すべての要素でサポートされます。ビュー・ツリーに要素が表示されるたびにトリガーされます
  • "TouchUpInside" - UIButton要素でサポートされます。ユーザーがボタンをタップしたときにトリガーされます
  • "DidSelectCell" - UITableViewまたはUITableViewCellでサポートされます。ユーザーが表のセルを選択したときにトリガーされます

重要: 各セルでアクション・トラッキングが発生するため、'ElementView'アクションを表セルにバインドしないでください。

サポートされるUI要素の変換

重要: 一部の変換には最小値または最大値のチェックがないため、バリアントを慎重にテストしてから稼働中に公開してください。

UIView変換