Yappli Tech Blog

株式会社ヤプリの開発メンバーによるブログです。最新の技術情報からチーム・働き方に関するテーマまで、日々の熱い想いを持って発信していきます。

iOSDC Japan 2019 に参加しました✨

  • 参加メンバー(寄稿者) 👤
  • イベントの様子
  • 食事(朝食、ランチ)
  • 参加メンバーの感想
    • 今こそ理解しよう、輸出コンプライアンス
    • 先生のことをお母さんって呼んでも大丈夫。そうObjecive-Cならね
    • AR Quick Lookを家具ECサイトに導入した話
    • ライブラリのインポートとリンクの仕組み完全解説
    • LT
    • Advanced Segue (2019年のSegue事情)
    • めくるめくシェーダアートの世界
    • Heart of Swift
    • Xcodeのコードカバレッジ計測ではなぜブランチカバレッジが取れないのだろうか?
    • モバイル決済アプリの作り方
    • 1ヶ月半でプッシュ通知許諾率を17%から40%にあげた話
    • iOSDC茶会
  • まとめ
  • PR

参加メンバー(寄稿者) 👤

西田古賀山本三縞

イベントの様子

f:id:yako000:20190912115546p:plain

続きを読む

なぜ定性調査を行うのか - 後編

f:id:jo_yapp:20190827134450j:plain

こんにちは、UI/UXデザイナーの城です。

前回の記事では、Yappliで提供しているアプリの機能刷新にあたって、調査の経緯と気づきについてお話しました。 この記事では、ユーザーインタビューで得られた情報をモデル化し、その結果を社内に報告したことについて書きたいと思います。

続きを読む

なぜ定性調査を行うのか - 前編

f:id:jo_yapp:20190827092501j:plain

こんにちは、UI/UXデザイナーの城です。

UI/UXチームでは日々、Yappli(ヤプリ)というプロダクトのUI改善や新規機能開発の体験設計を行っています。 今回は最近実施した定性調査のご紹介とその有用性について前編・後編に分けてご紹介したいと思います。 前編は実施した調査の経緯と気づきについてです。

続きを読む

Kotlin Fest 2019 にみんなで行ってきた!

こんにちは。株式会社ヤプリでAndroidエンジニアをしている白井・dais-sasaです。

Kotlin が Android 開発で正式な言語として採用されて早 2 年となります。
今回は 8/24 (土) に開催された Kotlin Fest 2019 にみんなで行ってきましたのでレポートしたいと思います。

kotlin.connpass.com

続きを読む

potatotips #64 で Truth について話しました!

f:id:dais-sasa:20190828092047p:plain
potatotips#64 Repro様の会場

こんにちは、株式会社ヤプリでAndroidエンジニアをしているdais-sasaです!

先日、アプリエンジニア界隈で盛んに活動しているpotatotipsという勉強会で登壇してきました(2回目)。

potatotips.connpass.com

今回の主催者はRepro様になります。
以前の登壇記事にも記載しましたが、弊社でも11月にpotatotipsを主催するので、良ければご参加下さい。

今回のpotatotipsでは、以前当ブログでも紹介した「Truth」について「AssertJ」と比較する形で発表しました。
その際に使用した資料を公開します。

続きを読む

折りたたみスマホシミュレーターを動かして見た

こんにちは、株式会社ヤプリでAndroidエンジニアをしている岩端です。

もうそろそろ Android Qがリリースされそうですね! Android Qでは折りたたみ式デバイスのサポートが強化され、Android Studioでは折りたたみ式デバイスシミュレーターを使えるようになったので、動かしてみました。

折りたたみスマホとは

端末を二つ折りにできる折りたたみ式スマホ。

今年9月に数端末の発売が予定されていたり、OSとしてもサポートを強化し、今後の展開に注目が集まっている。

Android Studio準備

1.Android3.5 RC2(2019/8/13時点)をDLしてインストールして起動

2.Devices ManagerでCreate Virtual Deviceを押下 下記の端末サイズが用意されている

・7.3 Foldable

・8 Foldable f:id:yappli-iwahana:20190815100546p:plain

3.作成が完了したら実行

動かしてみて気が付いたこと

・色々な画面比率を想定して実装していれば、大きなデザイン崩れが起きることはなさそう

・スクロールするような画面の場合、開閉時で見える領域が異なる

・開閉動作で再描画が走る

 構成の変更に対する対応方法 -> 構成の変更を処理する  |  Android デベロッパー  |  Android Developers

・折りたたみ(マルチウインドウ)非対応にもできる

 android:resizeableActivityandroid:minAspectRatioを設定すると制限することができる

まとめ

折りたたみスマホ対応をする場合、下記2点の調整を行うと良さそうです。

1、デザイン崩れは無いか

2、各画面の折りたたみ開閉時の画面保持状態はどうあるべきか

元々多種の画面サイズ、密度、比率を想定して実装することが多いため、大きな画面崩れは発生しないと思います。 しかし、今後は更に様々なアスペクト比をサポートしていて、画面比率1:1を折りたたむと21:9のように大きく比率が変わるケースもある為、より幅広い使い道が生まれ、今まで以上に様々な端末サイズにあった調整が必要になっていきそうです。

f:id:yappli-iwahana:20190815164205p:plain
画面比率例

iOS 13 から導入されるSceneDelegateとは

こんにちは、ヤプリの三縞です。

Xcode 11 からはiOSプロジェクトを新規作成すると AppDelegate と同時に SceneDelegate も自動生成されます。
この記事ではこの SceneDelegate について、その役割や AppDelegate との違いについて調べたことを残しておきます。

SceneDelegateの役割

SceneDelegate によって、1つのアプリに対して複数のUIのインスタンスを作れるようになります。

今秋にリリースされるiPadOSでは Slide Over / Split View 機能で1画面の中に同じアプリを2つ並べることができるようになりますが、これはこの「1つのアプリに対して複数のUIのインスタンスを作れるように」なることで実現可能となります。

Xcode 11 からはiOSプロジェクトの新規作成時に自動で SceneDelegate が作成されることから、今後はiOSでも複数のUIインスタンスを利用した新しい機能が導入されるのではないかと思っています。

SceneDelegateの挙動

  • SceneDelegate は iOS 13 から導入される protocol UIWindowSceneDelegate に準拠するクラス
  • SceneDelegate必須ではない
    • Info.plistの Application Scene Manifest (キー名: UIApplicationSceneManifest) にSceneの設定があるときに必要となる
  • SceneDelegate がある場合・ない場合のどちらでも AppDelegate は必要
    • @UIApplicationMain Attributeを用いてアプリのエントリーポイントとして指定するため
  • 「ライフサイクルイベント」が発生したときは SceneDelegateAppDelegate のどちらかのメソッドしか呼ばれない
    • iOS 13 かつ SceneDelegate が使用されている場合は SceneDelegate
    • それ以外では AppDelegate
  • 「ライフサイクルイベント」とは以下のようなもの
    • バックグラウンド・フォアグラウンドへの移動
    • ResignActive・BecomeActive
    • open URL
    • NSUserActivity系
  • SceneDelegate がある場合・ない場合のどちらでも、アプリ全体に関わるイベントは AppDelegate のメソッドが呼ばれる
    • application:didFinishLaunchingWithOptions:
    • applicationWillTerminate:
  • SceneDelegate がある場合・ない場合のどちらでも、以下のような「ライフサイクルイベント」に関するNotificationは機能する
    NotificationCenter.default.addObserver(forName: UIApplication.didEnterBackgroundNotification, object: nil, queue: nil) { _ in
        print("notification didEnterBackgroundNotification")
    }

確認環境

  • Xcode 11 beta 5
  • Swift 5.1

参考資料

Copyright © 2018 Yappli, Inc. All rights reserved