iOS関連のことを調べてみた2020年08月25日

iOS関連のことを調べてみた2020年08月25日
目次

Swiftで画質をできるだけ保ちつつ画像ファイルサイズを下げる

# はじめに
– iPhoneで写真を撮ると無駄に画像サイズが大きいですよね。
– iOSアプリで画像を扱いたいときにうざかったりします。
– メモリを圧迫しますし、サーバーにアップロードする場合はサーバー代がかさみます。
– そこで、Swiftで画像ファイルサイズをなんとか下げたいと思ったのですが、ネット上にある方法だと画質がめちゃくちゃ悪くなってしまい困っていました。
– 色々試行錯誤して画質をできるだけ保ちつつ画像ファイルサイズを下げる方法を見つけたので共有します。

# 方法
ざっくり2つあります。
## 1 画像サイズをちっさくする
“`swift
extension UIImage {

func resize(targetSize: CGSize) -> UIImage {
return UIGraphicsImageRenderer(size:targetSize).image { _ in
self.draw(in: CGRect(origin: .zero, size: targetSize))

元記事を表示

Xcodeの開発で、ファイルを保存するだけで動的に中身が書き換えられるようにしてみた

Xcodeの開発で、通常であれば、ファイルを保存し、ビルドし、プログラムを起動するという手順をとる。プログラムを起動した状態で、終了させずに、その中身を書き換えるということは、通常はできない。だが、injectionという仕組みを使うと、できるようになる。
# 1. 「InjectionIII」を使ってみる
John Holdsworth氏により、「InjectionIII」というアプリが公開されている。これを使うと、Injectionを簡単に実行できるようになっている。
https://github.com/johnno1962/InjectionIII
以下、使ってみる。
## 1.1. アプリをインストール
InjectionIIIアプリをインストールする。
https://apps.apple.com/jp/app/injectioniii/id1380446739?mt=12

インストールされたら、実行する→Status menuにInjectionIIIアプリのアイコンが表示されたことを確認する→「Help/README」を選ぶと、以下のページに接続される。
https:

元記事を表示

【Flutter, Dart, freezed】Bad state: Unexpected diagnosticsでbuildが終わらない不具合

# TL;DR
`pubspec.yaml` に以下の2つを追加してください

“`pubspec.yaml
dependencies:
analyzer: ^0.39.14 <- 追加 dev_dependencies: build_runner: ^1.10.0 <- 追加 ``` ## 環境 ```sh # fvmを使用 [✓] Flutter (Channel unknown, 1.20.2, on Mac OS X 10.15.5 19F101, locale ja-JP) [✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3) [✓] Xcode - develop for iOS and macOS (Xcode 11.6) [✓] Android Studio (version 4.0) ``` ## 症状 - `Bad state: Unexpected diagnostics:` が大量に表示される - `[INFO] 1.6s elapsed

元記事を表示

iOSアプリで音楽や動画のバックグラウンド再生の実装方法(他アプリ音声を停止しないやり方も)

AVPlayerやAVAudioPlayerなどで音声再生や動画再生の実装をする場合デフォルトのままだとアプリをバックグラウンドへ移行したりスリープをした時に再生が自動で停止します。
以下の実装を行うことで再生を継続させることができます。

簡単な手順でOKです。

#手順1
1. プロジェクトファイルを開く
2. メニュー -> Editor -> Add Capability -> Background Modesを選択
3. Audio, AirPlay, and Picture in PictureのチェックマークをONにする

![スクリーンショット 2020-08-24 19.18.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678249/8a56ec6a-0f4a-1b0f-4530-bad6f8c8cadd.png)

#手順2
プロジェクト内の任意の場所に以下のコードを書きます

“`swift
// アプリ初期化時等
do {
try AVAudioSession

元記事を表示

[Swift] textFieldのclearButtonMode

`textField`は中身を全部消すことができる`clearButton`が実装できます。
画像の右端にあるバツマークです
![スクリーンショット 2020-08-24 18.36.53.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/468821/1f892bd5-a824-5f92-7932-251a4dd66b3c.png)

これの表示パターンは`clearButtonMode`の設定で変更することができます。

## .always

`.always`はtextFieldに文字列があれば常に出現します。

“`swift
textField.clearButtonMode = .always
“`

## .never

`.never`はボタンを表示しません

“`swift
textField.clearButtonMode = .never
“`

## .unlessEditing

`.unlessEditing`はtextFieldに文字列があり、textFieldが選択

元記事を表示

【iOS14】WidgetKitのテンプレートを読み解く

# はじめに
9月リリースが噂されているiOS14から、Widgetが追加されます。
表現が固定されていたホーム画面での体験が大きく変わる機能であり、
多くの人が注目しているかと思います?✨

![Apple_ios14-widgets-redesigned_06222020_inline.jpg.large_2x.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/119392/014dd05a-02c6-4589-0ea9-0349ab56c175.jpeg)

[公式ブログ](https://www.apple.com/jp/newsroom/2020/06/apple-reimagines-the-iphone-experience-with-ios-14/)

よし!自分のアプリにもWidgetを追加しよう!と手を動かそうとしている皆さんに向けて、
既存アプリへの追加手順の紹介と、テンプレートコードの読み解きをします。

本記事は、最低限の挙動と実装を確認したい人に向けての解説記事です。
Widge

元記事を表示

iPhoneX系の画面の下のバー(Home Indicator)を非表示にする方法

![IMG_7320.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678249/7f3ed0f7-4475-9290-c9fa-bf79043d7c2e.png)

画面の下にいつもいるバー
Home Indicatorという名前です。
iPhoneXが発売されて数年、私は知りませんでした。
全画面でコンテンツを表示したい時にこのバーだけ表示されてしまっていると見た目が悪いですよね。

但し常に非表示にしておくということはできませんが操作をしていない場合に非表示になってくれる実装方法があります。

非表示にしたいViewControllerに以下の一行を追加します。

“`ViewController.swift
override var prefersHomeIndicatorAutoHidden: Bool { true }
“`

公式ドキュメント:
[prefersHomeIndicatorAutoHidden](https://developer.apple.com/documentat

元記事を表示

【iOSアプリ審査対策】Firebase Hostingを使ってApple審査員とデモ動画を共有する

## 概要

ようやく開発が完了し、喜び勇んでアプリを審査に提出するも2、3日後あたりに

**「New Message from App Store Review Regarding…」**の件名メールが。

緊張しながら、Resolution Centerを開いてみると

**Guideline 2.1 – Information Needed**でのリジェクト!

内容は**「デモ動画を共有してくれ」**で、少しだけホッとするというケース。あるかと思います。(私はあります)

新規の初回審査には、このアプリの動作を説明するデモ動画を要求されるパターンが多く

本来は審査提出前に予め準備して置いた方がベターだと思います。

Appleの審査チームへのデモ動画の共有は、Google DriveやDropboxでも良いのですが

アプリで既に、Firebaseを使っている場合では

Firebase Hostingを使った方が手っ取り早かったので、その手順のメモです。

## 環境

– macOS Catalina 10.15.6
– npm 6.14.5
– firebas

元記事を表示

Literal について

#Image Literal
![スクリーンショット 2020-08-24 16.30.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562721/c0ec69a4-9f0e-cff2-d39d-cdfe89448a2c.png)

#Color Literal
![スクリーンショット 2020-08-24 16.30.39.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562721/227cab24-709f-a457-be66-ddc2e9b52e34.png)

#Literal
![スクリーンショット 2020-08-24 16.30.06.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562721/ecbbaa58-f568-d2e1-7ba8-df1af1dcae3f.png)

あとは
・Image Literal

元記事を表示

【Flutter/ Dart】外部アプリを起動して画像をシェアする方法

## 概要

共有機能(UI」で言うと`<`のやつ)を実装するために試行錯誤した結果、採用した方法を記します。

## 結論
`esys_flutter_share `を使って簡単に実装できました。

ちなみに他に試したのは下記です。
– Platform Channelsを使ってネイティブのコードに処理を委譲(外部アプリを起動)する。
– shareプラグイン(画像のシェアができず断念)

## 設定

“`.yml:pubspec.yaml
dependencies:
esys_flutter_share: [version]
“`

※`flutter pub get`を忘れずに

## コード

impportして

“`.dart
import ‘package:esys_flutter_share/esys_flutter_share.dart’;
“`

この2行だけで終わり!

“`.dart
final ByteData bytes = await rootBundle.load(‘assets/image.png’);
await Shar

元記事を表示

【Unity】iOSのLaunchScreenにStoryboardを使う

iOSのLaunch Screenの設定方法はいくつかありましたが、iOS13以降のApp Storeに提出されるすべてのAppは、Storyboardを使う必要があるようです。
[App StoreにiPhone Appを提出する:Apple公式](https://developer.apple.com/jp/news/?id=03042020b)

UnityではすでにStoryboardに対応していて、**Unity 2019.3以降では、Storyboardが自動生成できる**ようになりました。ただ、設定方法が少しトリッキーでハマってしまったので、設定方法をメモしておきます。

#LaunchScreenにStoryboardを使う方法
まず、Unityの「Project Settings」→「Player」の「Splash Screen」の項目を開きます。
デフォルトでは色々チェックが入っていますが、チェックをすべて外して、下の状態にします。
「Use Storyboard for Launch Screen」にチェックを入れたい衝動に駆られますが、それはワナです。気をつけて

元記事を表示

ViewとしてのSwiftUI

SwiftUIを今までのXibやStoryboardの代わりとして使うための方法をまとめました。
Playgroundで実行します。
ViewControllerを使わない、SwiftUIとModelだけのアーキテクチャにはまだ慣れないですが、コードレイアウトとしてのSwiftUIはメリットが大きいので、取り入れていきたいです。

## 登場人物と関係

|クラス|説明|
|—|—-|
|MyViewController|SwiftUIで作ったViewを表示するためのViewController|
|ContentView|SwiftUI|
|ContentViewDelegate|ボタンをタップした時のdelegate|
|ViewModel|タップ回数の変数を格納する`ObservableObject`|

それぞれの主な役割は以下の図です。

![SwiftUI+ViewController.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297014/53e617b3-8030-ae4a-

元記事を表示

AppleMusic連携で曲の固有のIDからMPMediaItemを取得したり曲を再生する時の知見

[Media Player](https://developer.apple.com/documentation/mediaplayer/) のFrameworkを使ってAppleMusic連携のアプリを作りたい。
しかしこんなんドキュメント見ても分からんだろっていう落とし穴があったりするので、いろいろ試してわかった知見を書く。

## 曲固有のID
単一の曲を表す[MPMediaItem](https://developer.apple.com/documentation/mediaplayer/mpmediaitem)にはいろいろとプロパティがあるが、曲を区別するためのIDは次の二つがある。似ているようで役割が違う。

### persistentID
自分のライブラリ内の固有のID(と思われる)
このIDがあれば、[MPMediaItem](https://developer.apple.com/documentation/mediaplayer/mpmediaitem)は取得できる。

次のように、`MPMediaPropertyPredicate`,`MPMediaQuery

元記事を表示

DHHのクロスプラットフォームアプリ・アーキテクチャ

DHH(Ruby on Rails作者)による「Basecamp」スマホアプリのアーキテクチャ解説記事について、所感をメモ。

## 記事

>Basecamp 3 for iOS: Hybrid Architecture
>https://m.signalvnoise.com/basecamp-3-for-ios-hybrid-architecture/

## 所感

ざっくりいえば「画面遷移はネイティブ / 画面の中身はHTML」というように役割分担したアーキテクチャになっている(実際はもっと細かいが)。HTMLを使ったスマホアプリはUXが問題になりやすいが、これによってうまく回避している。

確かに静的なテキストや図、ちょっとしたUIなどを表示するだけであれば、HTMLもネイティブもほぼ区別はつかない。むしろWebフロントエンドのための数々のフレームワークを活用でき、ネイティブより早くきれいにできる場合すらある。しかし、ネイティブのインタラクションや画面遷移をHTMLが模倣することは難しい(AndroidのバックキーやiOSのスワイプバックの扱いの問題もある)。そこで画面遷移周

元記事を表示

[SwiftUI]プレビューをDark Modeにする

SwiftUIのプレビューでDark Modeを試したい時のメモです。

## ソース

“`swift
import SwiftUI

struct ContentView: View {
var body: some View {
ZStack {
Color.init(“Background”)
.edgesIgnoringSafeArea(.all)
Text(“Hello, World!”)
.foregroundColor(Color(“TextPrimary”))
}
}
}

struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
.environment(\.colorScheme, .dark)
}
}
“`

ポイント

元記事を表示

CIImageをCVPixelBufferに

CIImageをCVPixelBufferにします。

1、CVPixelBufferをつくります。

“`swift
var pixelBuffer: CVPixelBuffer?
let attrs = [kCVPixelBufferCGImageCompatibilityKey: kCFBooleanTrue,
kCVPixelBufferCGBitmapContextCompatibilityKey: kCFBooleanTrue] as CFDictionary

let width:Int = 256
let height:Int = 256
// 欲しいサイズ

CVPixelBufferCreate(kCFAllocatorDefault,
width,
height,
kCVPixelFormatType_32BGRA,
attrs,
&pix

元記事を表示

PC内のファイルをスマホからも編集したい。

## はじめに

PCのVSCodeで編集したファイルを、スマホのPWEditorでも編集できる環境を整えたので、共有します。

## 環境

– PC:Windows10
– スマホ:iOS13.6

## 参考記事と相違点

[おすすめのPCとスマホ間のメモ連携方法](https://qiita.com/IGMML/items/888d41e725d3a44f6512)

ほぼ↑の記事の通りですが、2020年8月現在、PWEditorにGoogleでログインできなくなっているため、Googleドライブの代わりにDropboxを利用したら上手くいきました。

## おわりに

メモ書きが捗ります。お試しあれ。

元記事を表示

[Bitrise]2FAが有効になっているアカウントでAppStoreConnectにアップロード

BitriseでAppStoreにアップロードする時、2FA(二要素認証)が有効化されていると、メールアドレスとパスワードの2つだけではアップロードできません。
2FAをせずにAppStoreConnectと通信するためにはもう1つ情報が必要になります。
何度か調べたりしていたので、メモ。

## Appleアカウントの設定

– https://appleid.apple.com/account/home にログイン
– 「セキュリティ」セクションで、「App 用パスワード」の下の「パスワードを生成」をクリック
– 生成された文字列をコピー

## Bitriseの設定

– Workflow Editorを開く
– `Secrets`タブでkeyが`APPSTORE_CONNECT_APP_PASSWORD`(例)とvalueとして先ほどコピーした文字列を入力
– AppStoreConnect用メールアドレスとパスワードはすでに設定しているとします
– `Deploy to iTunes Connect – Application Loader`ステップの中の`Appli

元記事を表示

[iOS] [Android] [Crashlytics] Fabric SDKを使っているアプリはそろそろヤバイ

Crashlyticsを利用中のアプリについて、Fabric SDKを組み込んでいる場合、**2020年11月15日までにSDKを入れ替えてリリースしないと、Firebase Crashlyticsでクラッシュレポートを見ることができない**、ということになります。

Firebase Crashlyticsの公式ドキュメントより:

>注: Fabric SDK は非推奨になりました。
>Fabric SDK がアプリのクラッシュを報告するのは 2020 年 11 月 15 日までとなります。
>この日をもって、Fabric SDK と古いバージョンの Firebase Crashlytics SDK はアプリのクラッシュの送信を停止します。
>引き続き Firebase コンソールでクラッシュ レポートを表示するには、Firebase Crashlytics SDK のバージョンを Android の場合は 17.0.0 以降に、iOS の場合は 4.0.0 以降に、Unity の場合は 6.15.0 以降にアップグレードしてください。

https://firebase.goog

元記事を表示

何もしてないのに ERROR ITMS-90208 が出てデプロイできなくなったとき

# 現象

* ビルド自体は通る
* 既存のFlutterアプリをTestFlightに飛ばそうとしたら次のエラーが出る。

“`
ERROR ITMS-90208: “Invalid Bundle. The bundle Runner.app/Frameworks/App.framework does not support the minimum OS Version specified in the Info.plist.”
“`

# 何もしていないが、もしかすると関係があるかもしれない行為
* `flutter upgrade`
* `iOS Deployment Target`を`12.4`に変更した ← *どうみてもこれ*

# 環境
“`
[✓] Flutter (Channel dev, 1.22.0-1.0.pre, on Mac OS X 10.15.5 19F101, locale ja-JP)
[✓] Android toolchain – develop for Android devices (Android SDK version 29.0.3

元記事を表示

OTHERカテゴリの最新記事