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

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

【ionic】面倒臭がりでもできる、アラーム機能

時計やスケジュール張のアプリはもちろんですが、漫画アプリやコミュニケーションツールなどなど。通知機能はいろんなスマホアプリで活用されています。

今回はその中のアラーム通知をスマホアプリで実装する方法を「[ionic](https://ionicframework.com/jp/docs/intro)」というフレームワークを用いて紹介させていただきたいと思います。

# アラーム設定方法
基本的にはアラームの方法は2種類あります。

* プッシュ通知(リモート通知)
オンラインでの通知をすることができます。例えば、アプリ提供側から新着情報をユーザに提供したい場合はこれを使って通知を送ることができます。

* ローカル通知
プッシュ通知とは逆にオフラインの機能になります。ユーザが自分で時間を設定して、その時間に通知を受け取りたい場合に使えます。

一般的にアラームとなるとローカル通知をイメージされる方が多いと思います。今回はそのローカルでの通知を使ったアラーム機能を紹介します。

# ionic公式より
ionicの公式ページに[Local Notification](https://

元記事を表示

【swift】文字列を一文字ずつに分割する時のArray(“hoge”)の型について

**文字列を1文字ずつに分割したい!**
競技プログラミングを解いているとよく出くわしますね。

解決方法としては

“`swift

let str = “hoge”

let separatedStr = Array(str)
print(separatedStr)
// [“h”, “o”, “g”, “e”]
“`
という感じで`Array()`の()の中に文字列を入れれば、一文字ずつ分割してくれます。

でも、これで分割された文字列の配列は`String`型ではなく`Character`型なのです。

##`Character`型とは
developer.apple.comによると、
“A single extended grapheme cluster that approximates a user-perceived character.”
(google翻訳: ユーザーが知覚する文字を近似する単一の拡張書記素クラスター。)

なんか難しく書いてますがとりあえず、
「人間が自然に認識できる最小の”1文字の型”」
と認識していただければ大丈夫です。

問題なのは、*

元記事を表示

ちゃんと紐づけてるのにunrecognized selector sent to instanceエラーが出る時の対処方法

このエラーに数日悩まされたので備忘録として残します。

Bar Button Itemタップ時の処理を実装していたところ、
以前までは正常に実装できていたものが、「unrecognized selector sent to instance」のエラーで前に進めなくなった。

調べてみると、いくつか要因があるとのこと

1. identity inspectorのClassの設定が間違っている
2. Inherit Module From Targetにチェックが入っていない(自分はこれが原因だった)
3. タップ時のアクションを示す関数にて、引数(例:_ sender: UIBarButtonItem)が設定されていない

(2が原因の場合、Inherit Module From Targetにチェックを入れるか、もしくは、Moduleに手打ちすればよいとのこと)

参考になればいいな

元記事を表示

FlutterでiOSアプリの名前を日本語で設定する簡単な方法

ウェブで調べるとXcodeを使っての情報と日本語では簡単には設定できない旨の情報ばかりで、私のようにWindows→Codemagicで開発をしている物には参考情報が得られませんでした。
これを友人にぐちったところあっさり解決策が見つかったので、メモを兼ねて記載します。
__プロジェクトフォルダ\\ios\\Runner\\Info.plist__を編集する点は同じです。

——–

## 一番多く見つかる情報
先に注意を兼ねて半分間違いの情報です。
“`
CFBundleName
MyApp
“`
__CFBundleName__のstringにアプリ名を入力します。
ただしこれでは日本語の名前は設定できません。

## 正解の情報
“`
CFBundleDisplayName
私のアプリ
“`
とします。
__CFBundleDisplayName__はプロジェクト作成時には記載がありませんので追記する必要があります。

## まとめ
Xcodeでロ

元記事を表示

あなたのiPhoneを一瞬でアイプラフォンにしちゃおう!

# 動機

アイカツプラネット!始まりましたね!
筐体ではアイカツオンパレード!以前と同様に2次元バーコードを読み込ませる方式ですが、
テレビシリーズではアイプラフォンと呼ばれる限りなくiPhoneに近いデバイスにセットしています。

このままでは筐体で遊ぶときに混乱してしまうので、iPhoneをアイプラフォンにしてしまいましょう。

## 用意するもの

iPhone (XS以降、iOS13.1)
NFCタグ(シールになってるやつがいいです)
マイページ登録済みのアイドルライセンス

## オートメーションの設定

前項でほとんどの方がピンときたと思いますので、ここからはほぼ蛇足となる予感がしています(笑

ショートカットアプリで”個人用オートメーション”を作成します。
![IMG_6231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/410104/206a1d13-f6cb-ab89-f427-a8f1cf8ade0a.png)

オートメーションのきっかけとして”NFC”を選択し、用意したNFC

元記事を表示

TCAでdelegateを処理するパターン

# はじめに

この発表資料は、
[iOSアプリ開発のためのFunctional Architecture情報共有会3](https://connpass.com/event/201194/)の発表資料です。

内容として、TCAがdelegateを処理するパターンを整理し、Core DataのNSFetchedResultsControllerDelegateで自動で差分を検知してくれる仕組みをTCAでも使えるようにするという内容です。

# 導入

iOSDC2020 [iOSアプリ開発のための”The Composable Architecture”がすごく良いので紹介したい](https://fortee.jp/iosdc-japan-2020/proposal/40b59a33-1f0a-45ba-ba94-10ce9cf960f4)で出た質問から

> TCAではActionはViewStoreからしか発火できないので、ユーザ操作からしかActionを発火できないですよね?(だからAppDelegateのイベントとかからActionを呼び出せないのどうするんですか

元記事を表示

Kotlin Multiplatform Mobileで作ったプロジェクトで実機ビルドができない場合の対応

# 概要
プラグイン`Kotlin Multiplatform Mobile`を利用してプロジェクトを作った際、実機ビルドができないとなった時の対応。

– [Kotlin Multiplatform Mobile](https://plugins.jetbrains.com/plugin/14936-kotlin-multiplatform-mobile)

エラー内容としては下記。

“`
${Path}/iosApp.xcodeproj Building for iOS Simulator, but the linked and embedded framework ‘shared.framework’ was built for iOS.
“`

# 原因
AndroidとiOS側で共有されている’shared.framework’がiOS Simulator用にビルドされていて、実機では使えないという話。

FWは以下のような処理を経て生成される。
具体的にはConfigurationを基に各ターゲット向けに生成されたFWをコピーし、`xcode-frameworks`

元記事を表示

【iOS】個人開発で使って気分がよかったライブラリ5選【個人開発】

## [Yalantis/ColorMatchTabs: This is a Review posting app that let user find interesting places near them](https://github.com/Yalantis/ColorMatchTabs)
綺麗な上タブが作れるライブラリ!

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138063/d08fce99-47c3-3cb6-af6e-7a920c196f20.png)

## [janselv/fave-button: FaveButton is an iOS cute animated like button written in Swift.](https://github.com/janselv/fave-button)
素敵なボタンが簡単に実装できる!
![fave-button1.gif](https://qiita-image-store.s3.ap-northea

元記事を表示

【iOS/Android】ネイティブアプリ開発をしたい人への上達マップ【初心者】

## 想定読者:これからネイティブアプリを開発したい人
想定読者に向けて、上達の全体像をお伝えします。
新人や駆け出しエンジニアの方が自分がどのあたりにいるか把握でき
モチベーションアップになれば幸いです。

## まずは入門書の前半くらい
画面のレイアウトを作れるようになる
数字や文字列を表示できるようになる
ボタンを作る
ボタンを押したら、数字が増えたり減ったりするカウンターを作れるようになる
画面遷移ができるようになる
画面遷移の時に値を渡せるようになる

## 入門書の後半くらい
値を保存できるようになる。
値を呼び出せるようになる。
データベースにデータを保存できるようになる。
データベースからデータを読み出せるようになる。

色や動きなどを実装できるようになる

## 結構大変になってくる
通信処理ができるようになる
エラーハンドリングができるようになる

## お、そろそろ実務の駆け出しくらいには行けるか?
綺麗にレイアウトを組めるようになる
(AutoLayoutなど)
デザインガイドラインを理解する
非同期通信ができるようになる

アプリの審査に提出できる
権限周りが

元記事を表示

iOSアプリリリースで、誰も教えてくれなかった9つのこと

今週、iOSアプリをリリースしました。
[Purelist](https://apps.apple.com/us/app/purelist/id1549367431)という、とびきり書きやすいリスト型のライティングアプリです。
たぶん使えば言っている意味がわかってもらえるかと思います。

リリース後1週間、いくつか想定外のことがあったのでリストにしました。
これを読んで少しでもプロモーションやアプリストアのスクショの改善に役立てていただけると幸いです。

**1. リリース後にプロモーションしない限り、ほぼ誰にも見つけてもらえない
2. プロモーションしてもほぼ埋もれるし、インストールされない
3. レーティングは国別に表示される
4. サブタイトルは結構重要
5. プロモーション用テキストと概要は同じ場所に表示される
6. Store用アイコンは透過していなくても透過してるよって注意される
7. App Analyticsの更新時間はバラバラ
8. オプトインユーザーが少ないのでデータを拾いにくい
9. フィードバックはApp Storeでもらいにくい**

## 1. リリース後に

元記事を表示

何回もこのコンピュータを信頼しますかと表示されて実機テストができない

#バージョン
– macOS Catalina v10.15.7
– Xcode v12.3
– iOS 14.3

#現象
xcodeで実機テストをしようと思い、iphoneをmacに接続したら、
このコンピュータを信頼しますかという画面が表示されては消えを繰り返して、
接続ができない

#解決策
Window > Devices and Simulators > Simulators
ここで不要なデバイスを開き、
Show as run destinationのチェックを外す

どう関係があるのかわかりませんが、このチェックをはずしたところ問題が解決しました

元記事を表示

AVFoundation 音再生

## 音再生方法

まず AVFoundation をインポート

“`viewController.swift
import UIKit
import AVFoundation

class ViewController: UIViewController,AVAudioPlayerDelegate {

var player :AVAudioPlayer!

“`

まず、音ファイルをXcodeに追加。追加するのはここ!!
今回は 
umbrella と souziki が入っていますね。
![スクリーンショット 2021-01-23 21.07.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/562721/2909f8de-4473-c600-e449-b3a16370cd6e.png)

音声を呼び出す用の関数を定義!

“`viewController.swift

public func prepareSound() {
let soundF

元記事を表示

Firebaseの CloudMessaging での通知実装と Apple Developer Certificates に苦戦したメモ

基本的にはこちらの手順に従う方針だが、既にCertificateを作成していたり、本番用と開発用で違ったり、Bundle ID が違うと動かないなどがあり苦戦したのでメモ。
https://qiita.com/ausssxi/items/89305cdb3935d6f6f2b8

全体的に、iOSにおけるプッシュ通知は基本UserNotificationsをimportして使うが、そもそものプッシュ通知を送るバックエンド側のシステムが必要で、それがニフクラモバイルやFirebaseで実装されることが多いっぽい。なおFirebaseのCloud MessagingというのはFirebaseコンソールからユーザーにメルマガみたいにプッシュ通知を送れる仕組みのことっぽい。

##主なつまずきポイント

###シミュレータでは通知こないっぽい?
まずiOSにおける通知はアプリ起動中はこない模様。`Singing & Capabilities`で`Push Notifications`と合わせて`Backgound Modes`を追加しているので、アプリが表で起動してないときに通知を送る仕様なの

元記事を表示

FIT SDKのMacStaticLibで大きなメッセージを書き込んだときにデコードに失敗する不具合を回避する

## TL;DR
`FitMesg.h` と `FitMesg.mm` を修正してビルドした `libFitSdkCppiOS.a` とヘッダーファイルを差し替える。
修正内容は記事の末尾。

## 不具合詳細
GARMIN FIT SDKはC言語/C++/Java/C#で提供されているが、同梱されているMacStaticLibを使用することでObjective-Cから使用することが出来、macOSやiOSのアプリから使用することができる。

しかし、このMacStaticLibにはバグがあり、メッセージのサイズが256Byte以上になるとヘッダーに書き込まれるデータ長とファイル末尾のCRCの値がおかしくなり、デコードできないFITファイルが生成されてしまう。

[Objective-C Wrapper generate broken header when include long message – Discussion – FIT SDK – Garmin Forums](https://forums.garmin.com/developer/fit-sdk/f/discussi

元記事を表示

Flutterとはなんぞや。〜html、cssを見たくないけどモダンなUI組みたいあなたへ〜

お久しぶりです!やびーくでっす! :sunny:
本日は、FlutterでiOSとAndroidのアプリを開発する方法についてお話しします!

# 目次
+ Flutterとは
+ プログラムの一元管理
+ HTML、CSSを意識しないモダンなUI構築
+ 豊富なライブラリとホットリロード
+ 実際に体験したい方へ
+ 開発チームメンバーの声
+ 参照記事

# Flutterとは

FlutterはiOSとAndroid両方で動作するスマホアプリを作成するためのDart言語のフレームワークです!

一部ハードウェアに依存するコードはそれぞれjavaやobject-cなどで記載する必要がありますが、
プログラムで共通化できる部分は共通化することができるので、iOSとAndroid両方のアプリケーションを作る場合のプログラムソースをほとんど一元化することができます。

## プログラムの一元管理

画像を元に説明します。
※あくまで触ってみて感じたイメージなので参考までに!
![ 2021-01-12 19.31.38.png](ht

元記事を表示

【RxSwift】Reactive の Extension を作成する際にメモリリークが発生した

## 環境
– Xcode 12.3
– RxSwift 5.1.1

## 目的

– `TabTestViewController` の `self.viewDidLayoutSubviews()` 呼び出しを検知しその際の `self.index` を流す `Observable` を作成したい

“`TabTestViewController.swift

// こんな感じで利用する currentIndexDidChange を Extension で実装
self.rx.currentIndexDidChange
.subscribe(self.indexSubject)
.disposed(by: self.disposeBag)
“`

## 当初実装

– 以下のように実装するとメモリリークが発生する

“`TabTestViewController+rx.swift

extension Reactive where Base: TabTestViewController {

var currentIndexDidChang

元記事を表示

iOSショートカットAppでInstagramの画像動画保存機能を作ってみた

# はじめに
Instagramの写真や動画を保存できるサイト([Instadownloder](https://instadownloader.co/ja/)など)は存在しますが、投稿リンクをコピーしてサイトに貼り付けて、実行ボタンを押して、表示された画像をダウンロードといった手順が煩わしいと感じたためショートカットAppでの作成に取り掛かりました。このショートカットでは、投稿リンクをコピーして実行ボタンを押すだけで写真や動画のダウンロードまで行ってくれることを目指しました。

# 成果物
実際に作成したショートカットは[こちら](https://www.icloud.com/shortcuts/59f48abf287044ddb6387e715c32d80d)からダウンロードできます。
ダウンロードしたショートカットを使用するためには、設定から「信頼されていないショートカットを許可」を有効にする必要があります。
設定方法は、「設定>ショートカット>信頼されていないショートカットを許可」から行うことができます。尚、なんらかのショートカットを事前に一度実行させていないと信頼されていない

元記事を表示

XcodeのComponentsのSimulatorがdownload済みなのに使えない時の対処法

Xcodeをuninstallしてinstallしなおした時に、前のXcodeの情報が残っていたのでその対処法を備忘録として残しておきます。

# 現象
– `Add additional Simulators` または `Window -> Devices and Simulators -> Simulators -> +` でsimulatorを追加しようとしたところ、 `OS Version`の選択にiOS 10.3が表示されない

![スクリーンショット 2021-01-22 13.48.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/150615/6f86d44b-e205-248b-7af4-152662eed962.png)

– `Download Simulators` または `Xcode -> Preference -> Components` で確認するとiOS 10.3 Simulatorはダウンロード済みになっている

![スクリーンショット 2021-01-22 13.

元記事を表示

【Model I/O】MDLMeshオブジェクトから頂点データを取得する方法

Model I/Oフレームワークの、MDLMeshオブジェクトから頂点の情報を取得するのが面倒だったので、メモ。

参考:
Read vertex positions with Model I/O
https://gist.github.com/algal/8e31ce035af0aafebc3736661ae9e3cd

mdlMeshにMDLMeshオブジェクトの値が入っているとして、これをXcodeのデバッガ(LLDB)上で取得したい場合。

頂点の数を取得する。

“`swift:デバッガ
po mdlMesh.vertexCount
// 出力結果:54
“`

バッファのデータのstrideを確認する。

“`swift:デバッガ
po mdlMesh.vertexDescriptor.layouts.filter {($0 as! MDLVertexBufferLayout).stride != 0}
// 出力結果:
// ▿ 1 element
// – 0 :
`

元記事を表示

【SwiftUI】SwiftUI Appで`window.rootViewController`を用いた初期画面の表示

# はじめに
アプリの初期画面を`window.rootViewController`を用いて表示することは採用したアーキテクチャにもよると思いますが、よくあることかと思います。
ただし、プロジェクト作成時に`Life Cycle`で`SwiftUI App`を選択した場合に少し実装が必要だったため記しておきます。

# 実装
`SwiftUI App`でプロジェクトを作成すると、以下のようなファイルが生成されます。
このままだと`ContentView`が初期表示画面になってしまいます。
例えば`Coordinator`や`Rooter`パターン等を利用したい場合は`AppDelegate`や`SceneDelegate`を経由したくなります。

“`swift:SampleApp.swift
import SwiftUI

@main
struct SampleApp: App {
var body: some Scene {
WindowGroup {
ContentView()
}
}
}
“`

まず

元記事を表示

OTHERカテゴリの最新記事