iOS関連のことを調べてみた

iOS関連のことを調べてみた
目次

【Flutter】Admob使用時にアプリ起動が稀に失敗する問題の対応

## 背景
FlutterにてiOSアプリの開発中、Admobの広告を配置した後にリリースモードでテスト、
もしくはTestFlightにて実機テストを実施した。

その結果、以下のように正常に起動しないケースが稀に発生することに気づいた。

![fail.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/660544/c5cf5253-6a9f-56cb-679b-4d993b1e4c3a.gif)

## 原因
void main()内でAdmobインスタンスの初期化(MobileAds.instance.initialize())および、
runApp()を実行しているが、Admobインスタンスの初期化が非同期処理であるため、
初期化が完了する前に広告が描画されることが稀に起こっており、それが原因に見える。

そのため、Admobの初期化完了を待ってrunApp()を実行するように修正。

“`Dart
void main() async {
WidgetsFlutterBinding.ensu

元記事を表示

[Swift] DropDelegate で画面外に放したアイテムを検知する

# はじめに

今回は `SwiftUI` の `DropDelegate` に関してです。
特定の挙動に対してあまり情報がなかったので、メモ的な感じで残しておきます。

# 概要

## DropDelegate に関して

`SwiftUI` 上でドラッグ&ドロップを実装する場合、一番簡単なのは `List` の `editMode` を使うことです。

ただし、`List` では

– バージョンでの UI 差分(主に iOS15 未満で発生)
– `List` のセルによるデザイン制約
– 機能自体をカスタムができない

などの理由もあり、より細かい実装をしたい場合には、`DropDelegate` を使う状況もあると思います。

https://developer.apple.com/documentation/swiftui/dropdelegate

`DropDelegate` には、デフォルトで5つのメソッドが用意されています。

– `func validateDrop(info: DropInfo) -> Bool`
– `func performDrop(in

元記事を表示

FlutterのImagePickerで画像のキャッシュが残ってしまう問題

[株式会社Never](https://neverjp.com/)のshoheiです。

株式会社Neverは「NEVER STOP CREATE 作りつづけること」をビジョンに掲げ、理想を実現するためにプロダクトを作り続ける組織です。モバイルアプリケーションの受託開発、技術支援、コンサルティングを行っております。アプリ開発のご依頼や開発面でのお困りの際はお気楽にお問合せください。
https://neverjp.com/contact/

# 概要

Flutterでカメラや写真から画像を扱う際は、[image_picker](https://pub.dev/packages/image_picker)を使うかと思います。image_pickerはとても簡単に使えて便利なパッケージですが、画像のキャッシュが端末内に残ってしまい、ストレージを圧迫することがあったので、その対策をまとめます。

# `image_picker`で選択した画像の保存先

iOSとAndroidではそれぞれ異なります。

|OS |保存先 | 保存先の取得方法|
|—|—|—|
| iOS |

元記事を表示

xcodeからGit連携時に”Failed to load repository owners”エラーが出る

# やりたいこと
以下画像のエラーを解決する

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/645607/6d4b9d40-bf74-e1d4-791e-f3ff72ed42c8.png)

IOS開発時にXcodeからGithubへリモートリポジトリ作成などをしていた。
その際に発生したエラーの対応をしていく。

# 対応策
以下記事を参考にすると良い。
>https://zenn.dev/umas/articles/09dff47d5be757

元記事を表示

学校配布端末でYoutubeみる方法(2024年1月7日時点)

皆さん、学校から配布されてる端末(Chromebook、iPad等)でYoutubeを見たいと思ったこと、ありますよね?(問答無用)なので、今回は、そんな少年少女(お前が言うか)のために、Youtubeを見る方法を教えていきたいと思います!!
ちなみに、筆者の環境は以下のとおりです。

・ASUS Chromebook Flip C214MA
・ロイロWebフィルター
・ドメイン管理済み(Gmailなどはブロックされる。)

ではでは早速Youtubeに飛んでいきます!

①ブラウザを開く
②https://www.croxyproxy.com/_ja#google_vignette に飛ぶ
(ここの時点でプロキシ回避と言われブロックされてしまった勇者よ、、、南無南無)
③Youtubeのリンクをコピペし、「飛ぶ!」をクリック

そうすると、フランスのIPアドレスに飛ばされ、Youtubeが見れるようになります!
ここでの注意点は以下のとおりです!

・前述した通り、フランスに飛ばされるため、Youtubeの初期候補はフランスの動画
・Googleアカウントにはログインできない(メアド

元記事を表示

stability.aiのREST APIを使って簡単に画像生成アプリを作ってみた

# はじめに

前回「[Stable Diffusion APIを使って簡単に画像生成アプリを作ってみた](https://qiita.com/razuma/items/6af94f8d0edf67a0bffe)」と言う記事を書きましたが、今回は本家のstability.aiのREST APIを使って画像生成アプリをつくりました。

# 利用したサービス
Stable Diffusion本家のStability AI
https://platform.stability.ai/
画像1枚作成ごとにコストがかかる。最初に少しだけ無料でトークンをもらえます、その後は自分で追加していく方式。設定するパラメータによってかかるコストが違います。

# 今回使用したAPI
v1/generationのtext-to-image
https://platform.stability.ai/docs/api-reference#tag/v1generation

設定できる各パラメータについては以下

height: 画像の高さ、設定できる値は使用できるモデルによって決まっている
width: 画像の

元記事を表示

【SwiftUI】オーディオの出力変更を検知する

## 始めに
有線のイヤホンやairpodsなどが端末と接続されオーディオの出力先が変更したとき、これを検知することができますが、少し躓いたので書き留めておきます。

## 本題
“`swift
import SwiftUI
import AVFoundation

class AudioSessionManager: ObservableObject {
@Published var headphonesConnected: Bool = false

init() {
do {
try AVAudioSession.sharedInstance().setActive(true) // この処理がなくて躓いた
print(“AVAudioSession is now active”)
} catch {
print(“Failed to activate AVAudioSession. Error: \(error)”)
}
le

元記事を表示

【SwiftUI】メニュー内のボタンを押した後、メニューを閉じない

# はじめに
iOS16.4から`menuActionDismissBehavior`というメソッドが使用できるようになりました。
これはメニュー内のボタンを押した後、メニューを閉じないようにすることができます。

# 実装
“`diff_swift
import SwiftUI

struct ContentView: View {
@State private var searchText = “”

var body: some View {
Menu {
Button {
print(“heart”)
} label: {
Label(“heart”, systemImage: “heart.fill”)
}

Button {
print(“star”)
} label: {

元記事を表示

【SwiftUI】ボタンの長押ししている間は繰り返し処理を行う(iOS17)

# はじめに
言葉だけだとイメージしづらいと思うので具体例を出すと、キーボードのバックスペースボタンです。
バックスペースボタンを長押ししている間は文字を消し続けてくれます。

あれを自前で実装しようと思うと割と大変そうです。

iOS17から標準機能として提供され始めたので記事にしておきます。

# サンプルアプリ
![画面収録-2024-01-06-23.19.12.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/51e92b74-4e90-3a35-ca70-8cd669052b9c.gif)

# 実装
“`swift
import SwiftUI

struct ContentView: View {
var body: some View {
Button {
print(“りんご”)
} label: {
Text(“長押しで「りんご」と繰り返し出力する”)
}

元記事を表示

上部と下部で背景色が異なるスクロールビューの問題と解決策(SwiftUI)

## はじめに

本記事は [SwiftWednesday Advent Calendar 2023](https://qiita.com/advent-calendar/2023/swift-wednesday) の24日目の記事です。
昨日は @uabyss さんで [swift-syntaxを用いて、簡単なコマンドラインツールを作ってみる](https://zenn.dev/oks/articles/2dcd28a22d4ba6) でした。

SwiftUIにおいて、上部と下部で背景色が異なるスクロールビューの問題と解決策を紹介します。

## 環境

– OS:macOS Sonoma 14.0(23A344)
– Swift:5.9

## 「上部と下部で背景色が異なるスクロールビュー」が抱える問題

「上部と下部で背景色が異なるスクロールビュー」といわれてもピンと来ないと思うので、具体的な例を紹介します。

よくあるパターンとしては、「ヘッダーとリストで背景色が異なる」です。

以下はヘッダーの背景色が白で、リストの背景色がグレーのビューです。
スクロールビューの背景色はグ

元記事を表示

[iOS] Third-party SDK requirementsのPrivacy Manifests対応状況一覧

# Privacy Manifests 対応

WWDC2023 で [Privacy Manifests について](https://developer.apple.com/videos/play/wwdc2023/10060)の発表がありました。
この Privacy Manifests は、2024 春までに対応必須であり、大きく下記4つの観点があります。それぞれどういった対応が必要かは本記事では割愛します。

– Privacy manifests
– Tracking domains
– Required reason APIs
– **Third-party SDK requirements**

本記事は、Third-party SDK requirements で対応が必要な SDK の一覧が、[先日公開](https://developer.apple.com/videos/play/wwdc2023/10060)されましたので、各 SDK の Privacy Manifests 対応状況をウォッチできるようにリポジトリと対応状況をまとめたものになります。
http

元記事を表示

大学を留年しかけたので楽単を検索できるアプリを作ってみたらユーザー数が1000人超えちゃった話

# お前誰やねん
![](https://storage.googleapis.com/zenn-user-upload/a8146d8aa5fa-20231203.png)
岡山理科大学に在学しているGadgeloggerと申します。
学部は情報系で大学の勉強の傍ら、趣味でFlutterやSwiftなどモバイルアプリを作っていることにハマってます。
絶賛就活中で面接落ちしまくっているのが悩みどころ

# アプリの概要
**動画**

https://x.com/TAN_Q_BOT_LOCAL/status/1495295998759153666?s=20


**紹介サイト**

https://ous-unoffical-app.studio.site/​

まあ詳しくはここを見てほしい(というか書くのめんどくさい)んやけど、
・大学の便利な情報を掲載(電話番号とかマップとか掲示板とかね)
・楽に単位が取りやすい講義・取りにくい講義を投稿できるSNSのような機能
を搭載している感じやわ。
押したい機能は後者の方やね。
# 制作背景
制作しようと思った理由は2つあっ

元記事を表示

【SwiftUI】状況によってonSubmitを無効化する

# はじめに
状況によって`onSubmit`を無効化したいことがあったとします。
onSubmit内で分岐処理を書けば解決する話ではありますが、SwiftUIの機能で`submitScope`というものがあります。
上位層についている`onSubmit`を一部Viewで無効化することができるようです。

“`swift
Form {
TextField(“Username”, text: $viewModel.userName)
SecureField(“Password”, text: $viewModel.password)

// このテキストフィールドではonSubmitは実行されない
TextField(“Tags”, text: $viewModel.tags)
.submitScope()
}
.onSubmit {
guard viewModel.validate() else { return }
viewModel.login()
}
“`

# サンプルアプリ
![Simulator Scree

元記事を表示

【Swift】Library,Framework, Packageの違いを理解する

## 実際のところ
便利な機能をインポートする目的や、処理の共通化の目的などでLibraryやFrameworkを使用したりするが、その違いを説明するのは難しい。
今回調べたので、記事にする。

## 違いを明確にしていく対象

– Library
– Framework
– Package

## その前に 〜StaticとDynamicの違い〜
それぞれを比較する前に、
リンクの方式としてStatic Link(静的リンク)とDynamic Link(動的リンク)がある。

リンクとは?
> プロジェクトのソースコードをコンパイルして生成されたオブジェクトファイルや外部ライブラリなどを全て連結(リンク)して実行ファイルまたは、ライブラリを生成する機能で、リンカ が行います。

ざっくり、アプリのような最終成果物を作るために必要な工程というイメージ。

StaticとDynamicの違い
– リンクされるタイミングの違い
– Static:ビルド時にリンクされる
– Dyna

元記事を表示

【SwiftUI】macOSのアラートに表示されるアプリアイコンの箇所を好きな画像に変更する(macOS13)

# はじめに
macOS13からアラート(ダイアログ)のアイコン部分が変更できるようになりました。

# こんな感じ
|通常|今回の実装後|
|-|-|
|![スクリーンショット 2024-01-04 20.23.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/e01a528e-e126-c11e-60d6-a6c1ca4cfcbf.png)|![スクリーンショット 2024-01-04 20.23.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1745371/a564aeb4-dc3b-ea8d-5ee1-c6f446ecf1b8.png)|

# 実装
“`diff_swift
import SwiftUI

struct ContentView: View {
@State private var isShowingDialog = false

var body

元記事を表示

3万円くらいでiOS開発環境を整える方法(’23/12時点)

# 結論

16G(以上)のUSBメモリ用意して中古のiMACに最新のmacOSとXCodeを入れる

– USBメモリ ➡ 32Gがamazonで500円くらいで買える
– iMAC ➡ 2014年くらいのだとリコレで30000円くらいで買える

# 背景
– iOSで手軽に色々やりたい
– UIに時間かけたくない
– お金もかけたくない

# 経緯
## Sonoma
Reactの環境を新しくしようと
[この辺](https://qiita.com/takubii/items/13eb2fff2d8850f55e7d)とか見て
やってみたがなんかXcodeが古いとか言われて動かない

mac買い替えだと、、、
ノートPCに60万超えってなんやねん

Windowsだって結局古いPCにインストール出来るようになったんだし
Linuxは当然古いPCで動く
macだけ動かないとか無いやろ
と思って調べて見ると、[OCLP](https://dortania.github.io/OpenCore-Legacy-Patcher/)とかいうのがあるらしい

手順は[このサイト](https:/

元記事を表示

iOS16からのQRコードの読み取り

iOS16以前はAVFoundationを用いてQRコードの読み取りを実装していました。しかし、iOS16からはVisionKitの新機能により、より簡単な方法でQRコードのスキャンが可能になりました。
VisionKitは、機械学習を活用した画像認識技術を提供しており、これにより容易に高品質なデータ認識機能をアプリに組み込むことができます。

忘れないように備忘録として実装方法を残しておきます。

# 実装
以下が実装です。 SwiftUIで使用できるようにUIViewControllerRepresentableでラップしています。

“`Swift
import VisionKit
import UIKit
import SwiftUI

public struct QRCodeReader: UIViewControllerRepresentable {
private let onRecognize: (RecognizedItem.Barcode) -> Void

public init(onRecognize: @escaping (Recognize

元記事を表示

【SwiftUI】カスタムのShapeStyleを作成する

# はじめに
私はデザインのことは分かりませんが、真っ黒や真っ白は目が疲れてしまって文字色には適していないという記事を見たことがありました。
私が見た記事は見つかりませんでしたが、同じようなことを書いてある記事はたくさんあります。

https://tomodachitokigyo.com/web/blog-fontcolor-noblack/

デザインで使ってはいけない色「黒#000」のおはなし

しかし、SwiftUIの標準で使用できる`primary`は真っ黒と真っ白です。
使うたびに分岐の処理を書くのは面倒です。
ですので、カスタムの`ShapeStyle`を実装します。

# サンプルアプリ
上が標準の`pr

元記事を表示

FlutterでGoogleサインインやってみた!

## はじめに
私はiosで開発を進めました。参考になったサイト、動画と私が詰まったところを記載します。

## 進め方

以下のルビーDog様の動画を参考に進めました

webで開発するための解説動画となっています。主にサインインするための流れを図とイラストを用いて説明してくださっているのでとてもわかりやすいです。

しかしwebとiosでは少し違って、plistファイルを編集する必要があります。なので、以下のサイトで補いながら進めました。

#### 参考したサイト
1. すごく参考になったサイト(plistファイル書き方)
https://zenn.dev/flutteruniv_dev/articles/710683144ca9cf
2. 公式サイト(Dartドキュメント)
https://pub.dev/packages/google_sign_in_ios

## 詰まったところ1
##

元記事を表示

iOS/Swiftで小顔加工フィルターをつくる

# 美顔小顔加工アプリを作る

![小顔.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/235259/6acc1374-59e9-0b01-937f-19e9a2c0b476.gif)

インスタにアップロードする時って小顔にしますよね?
小顔フィルターの実装の仕方です。

# 顔を検出してゆがませる

顔の領域を中心にゆがませます。
これで、周囲はなるべく自然に、顔だけ徐々に小さくできます。

### 顔の検出

“`swift
let request = VNDetectFaceRectanglesRequest()
let handler = VNImageRequestHandler(cgImage: cgImage, options: [:])
try? handler.perform([request])
guard let results = request.results, let firstFace = results.first else { return nil }
let bo

元記事を表示

OTHERカテゴリの最新記事