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

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

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

元記事を表示

【入門】iOS アプリ開発 #6【キャラクタの操作】

# はじめに

今回はパックマンのキャラクタ操作を作成する。操作はスワイプで行い、以下が完成イメージ。ソースコードは[GitHub](https://github.com/Kikutada/0004_PlayerTest) に公開しているので参照してほしい。

※YouTube動画
[![IMAGE ALT TEXT HERE](http://img.youtube.com/vi/OdkvsAbA24M/0.jpg)](http://www.youtube.com/watch?v=OdkvsAbA24M)

# 仕様書

注目すべきところはスピードレベルの仕様。単に1ドットずつ動かすなら簡単だが、微妙なスピード調整の仕様があり、ゲームの難易度を調整している。

![Spec1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/678332/b1727dd6-0d59-1a18-388b-7d315d6da3c0.png)

エサを食べる、食べない、パワーエサを食べた状態などで、移動スピードが異なる。仕様段階

元記事を表示

Extension でのインスタンスの取り扱いに注意する

今回は以前書いた下記の記事で、アプリのパフォーマンスをさらにあげるための方法を簡単に紹介したいと思います。

https://qiita.com/yum_fishing/items/cee4d2ed3561bfae7fd7

### 改善方法

整数に3文字区切りのカンマをつけた文字列を返すプロパティを以前は下記のような形で書きました。

“`swift
extension UInt {
var withCommaString: String {
let numberFormatter = NumberFormatter()
numberFormatter.numberStyle = .decimal
numberFormatter.groupingSeparator = “,”
numberFormatter.groupingSize = 3

return numberFormatter.string(from: NSNumber(value: self)) ?? “\(self)”

元記事を表示

初めてのFlutter アプリ開発およびパッケージ紹介

# アプリ開発(Android Studio環境下の開発とする)
1. start a new Flutter project
2. Flutter application
3. androidのネイティブアプリと同様の手順(名前作成)
4. ファイルの作成完了
5. lib file内に
– main.dart(ソースコード)
– pubspec.yaml(パッケージ定義)
6. ソースコードの編集が完了した場合,右矢印のrunをクリック,プログラム実行

## Flutter開発
### Hello Worldの実装
以下がHello Worldのプログラムとなる. /libs/main.dartを書き換え

“`dart

import ‘package:flutter/material.dart’;

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {

元記事を表示

【Flutter】Android studio でエミュレータが見つからない場合の対処法

## 事象
エミュレータは起動されているのに、’Loading…’の表示が消えず、Buildできない自体が発生。

エラーの内容は以下。

“`
emulator: ERROR: Running multiple emulators with the same AVD is an experimental feature. Please use -read-only flag to enable this feature.
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/03ab8a6f-a625-b6cb-a7fe-779df917f0cc.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/261934/8c2e6576-ebcb-824f-bf4d-64c259de15cc.png)

## 解決方法
ユーザのルートディレクトリ直下の’.android

元記事を表示

Githubにコミットするとき.swiftファイルが出てこない時

#swiftやってる時にコミットできなくなったんでアウトプットしておきますね(;
初歩的なことですがつまづいてしまったので記事にしました。
具体的なこというとこんな感じ
通常
![スクリーンショット 2020-08-22 13.58.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679429/1c2dfdeb-3f74-e740-932d-63f651dc0ba7.png)
問題のやつ
![スクリーンショット 2020-08-21 14.58.58.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/679429/05427478-c359-0c6c-cfac-b61e70fd1aed.png)

#原因
.gitignoreファイルを作ってPodsをコミットしないようにする

#解決策

.gitignoreを作成した後、Xcodeを一旦閉じて、プロジェクトを開き直してからコミット画面を確認する

プロ

元記事を表示

Flutter ios 環境構築メモ

***<追加で更新中 最終更新日(2020/08/22)>***

本文は,`Flutterアプリ開発においてiosでのErrorが起こった内容および,それに対してTryしたことのメモ.`
自身が開発中に発生したエラーを共有させていただきます.また違う解決策があれば教えていただけると嬉しく思います.

## Error1:Warning: CocoaPods not installed.

***Debug時に発生するエラー内容***

1. 通常

“`shell

brew install cocoapods
pod setup
“`

2. 1,で完了しない場合

“`shell

sudo gem uninstall cocoapods
rm -Rf Pods/
rm -Rf Podfile
rm -Rf Podfile.lock
rm -Rf Runner.xcworkspace
brew link –overwrite cocoapods
flutter build ios
“`

上記の2つを行うことで解消することができた.

## Error2: err

元記事を表示

FirebaseCloudMessaging(FCM) で全ユーザに対してプッシュ通知を送信してみる

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292456/aef85a23-529d-05a2-8318-69d039d0755f.png)

今回は FirebaseCloudMessaging の Topic メッセージという機能を使用して CloudFunctions 経由で全てのユーザに対して Push 通知を送信する実装をしていきたいと思います。

## どうやるのか?

FCM の[トピックメッセージング](https://firebase.google.com/docs/cloud-messaging/ios/topic-messaging?hl=ja)
という機能を使用して実装していきます。手順は以下の通りです。

1. クライアントで Topic に登録する
– 今回は Swift(クライアント)で Topic の登録を行いますが、FirebaseAdminSDK を使用してクライアント
で取得した `fcm_token` を使って登録する方法もある

元記事を表示

【ReactNative / iOS】アプリ起動時に通知バッジを消す方法

# はじめに

ReactNativeアプリのiOSディストリビューションで、
アプリを起動した際に通知バッジを消す方法です。

# 方法

“`objective_c:AppDelegate.m
– (void)applicationDidBecomeActive:(UIApplication *)application {
[UIApplication sharedApplication].applicationIconBadgeNumber = 0;
}
“`

# まとめ

アプリを起動した際に、バッジが指定した値の数字になります。
0なら、バッジは消えます。

元記事を表示

iOSアプリ内広告の最小実装 – Google AdMob(Mobile Ads SDK)のインタースティシャル広告を表示する

## 事前準備

– AdMobアカウントを作成済み
– AdMobにアプリを登録していること

なお、記事内の広告テスト用IDを使えば試すだけなら可能。

### 環境
– iOS13.6.1
– Google-Mobile-Ads-SDK 7.64.0
– CocoaPods 1.9.3
– Xcode 11.6

## ATSを設定

[App Transport Security  \|  iOS  |  Google Developers](https://developers.google.com/admob/ios/app-transport-security?hl=ja)

ATSを切る、つまり安全でない通信やHTTP通信を**すべて許可**に設定する

info.plistに以下を追加

“`xml

NSAllowsArbitraryLoads

“`

### 注意
Googleのドキュメントには

**NSAllowsArbitraryLoadsInWebContent**と**NSAll

元記事を表示

【Unity】iOSのHome Indicatorを常に半透明にする

#HomeIndicatorを隠したい
HomeIndicatorを隠して画面をスッキリさせたい。
ただ困ったことに、HomeIndicatorは、非表示の設定にしても画面をタップすると表示される仕様のようです。
そこで、半透明にして目立たなくするようにしてみました。
![HomeIndicator.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/535406/b2af0ffd-84ad-eb54-687f-78331e6c029a.gif)
半透明の場合、スワイプが入力されるまで半透明を維持します。

#HomeIndicatorを半透明にする
Unityの「Project Settings」→「Player」の「Other Settings」に「Hide home button on iPhone X」という項目があります。これを有効にするとHomeIndicatorを非表示にできますが、上記で述べたようにタップすると表示されてしまうので、**無効**になっているか確認してください。
![スクリーンシ

元記事を表示

ShareExtensionで画像データを取得する

ShareExtensionで画像を取得する方法です。

# 環境

macOS Catalina 10.15.6
Xcode 11.6

# 準備

## Target追加

XcodeのTargetsにShareExtensionを追加します。

## plist設定

ShareExtensionのplistの以下を設定します。

NSExtension -> NSExtensionAttributes -> NSExtensionActivationRule -> NSExtensionActivat

元記事を表示

OTHERカテゴリの最新記事