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

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

【 Flutter 】 個々のユーザに対してLINEメッセージ通知を送る機能の実現 (LINE SDK・LINE Messaging APIを利用)

### 1. はじめに

flutter × LINE の実装って本格的なものは知見がWeb上にほとんどなかったので、思い切って記事にしてみました。

今回、具体的には、個々のユーザに対してLINEメッセージ通知を送る機能を実現します。そのためには、以下の手順に沿って実装する必要があります。

– LINEログイン機能を実装し、アプリでLINEログインを行ったユーザのIDを取得
– LINEメッセージ通知機能を実装し、上で取得したユーザIDを宛先として、メッセージ通知

単に、LINEログイン機能の実装、LINEメッセージ通知機能を個別で試すことは簡単ですが、それらを実用的に利用するには、各機能を連携させて使用する必要があります。

上記の機能をFlutterで実装した解説記事が見つからなかったため、本記事で解説しようと思います。多くのFlutter開発者の方々の助けになれば幸いです。

### 2. LINEログイン機能の実装

LINE SDKを用いる事で、LINEログイン機能を実装することができます。

### 2.1 LINE Developersの設定

LINE SDK

元記事を表示

[Swift] UIScreen.mainを使わずに画面の明るさを設定する

## 背景
`UIScreen.main`がiOS17以降においてdeprecatedとなっていますが、`UIScreen.main.brightness`を用いない画面輝度の設定についての情報があまりなかったのでメモとして残しておきます。

## 結論
`windowScene.screen.brightness`を使おう

## サンプルコードと補足
画面輝度を調節するだけなのであまり意味はないですが、`windowScene`の取得を
`guard let windowScene = UIApplication.shared..connectedScenes.first as? UIWindowScene`
の形を避け、
`view.window?.windowScene`
の形をとっています。
(前者の実装だとiPadのマルチウィンドウ等、複数wIndowが存在する際に意図していないwindowを取得する可能性があるため)

“`swift title:SampleViewController.swift
import UIKit

final class SampleVie

元記事を表示

FireBaseSDKを組み込んだiOSプロジェクトをGitHub Actionsでビルドする方法

# 課題
FireBaseSDKを組み込んだiOSプロジェクトでは、`GoogleService-Info.plist`というAPI Keyなどのシークレット情報を含むファイルをプロジェクトに含める必要があります。

シークレット情報なので、そのままGitHubのリポジトリにPushすると情報漏洩する危険があるので、基本的には`GoogleService-Info.plist`はPushしないようにします。

しかしCI環境でビルドする際に、`GoogleService-Info.plist`がないとFireBaseSDKを組み込んだiOSプロジェクトはビルド出来ないため、ビルド時には`GoogleService-Info.plist`をどうにかして参照する必要があるのです。

※FireBaseSDKの導入方法

https://firebase.google.com/docs/ios/setup?hl=ja#add-config-file

今回は後続で記載する環境で、上記課題を解決した方法を記事にしてみます。

# 環境
– Xcode: 16
– CI: GitHub Acti

元記事を表示

[SwiftUI] レビューリクエストの頻度を設定する方法

# 1. はじめに
アプリを開発する際、ユーザーからのフィードバックを得ることは非常に重要であり、レビューはユーザーがアプリをインストールするかどうかを決定する際の参考になります。
しかし、レビューリクエストは頻度が多いと、ユーザー体験を損なう可能性もあります。そこで、適切な頻度でレビューを促す仕組みを導入することが大切です。

本記事では、SwiftUIを使って、アプリ内でビューの遷移回数に応じて`SKStoreReviewController`を用いたレビューリクエストを行う簡単な実装方法を紹介します。
ユーザーがある程度アプリを使い慣れた段階で自然にレビューを促すことで、ポジティブなフィードバックを得やすくし、UX(ユーザーエクスペリエンス)を向上させることができます。

# 2. 完成イメージ
FirstViewに3回遷移した時にレビューリクエストが送られる。
![ScreenRecording_10-07-2024 10-30-54_1.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/38921

元記事を表示

モバイルアプリエンジニアがiPadの管理にMDMを導入した話

スタートアップに転職して現場の業務で利用するiPadの準備が大変だなぁと思いMDMを導入・運用したので備忘録です。

# 前提
– 複数の店舗があり各店舗で社内向けアプリをインストールしたiPadを業務で利用
– 私はこのアプリを開発するエンジニア
– 店舗のスタッフはアルバイトの方たち
– 総台数約100台

# MDM(モバイルデバイス管理)とは
> モバイル端末管理の略記。
> スマートフォンやタブレットなどの携帯端末を業務で利用する際に一元的に管理するための仕組み。
> MDMツールが提供する管理機能は、以下のようなものがある。
>  ・端末紛失時のリモート制御(ロック、データ削除など)
>  ・セキュリティポリシーやアプリケーションの配布、管理
>  ・アプリケーションや機能の利用制限と監視

引用:[ITトレンド](https://it-trend.jp/words/mdm)

# 導入のきっかけ
## キッティングの負荷が高い
– 共通のApple IDで1個1個ログイン
– App Storeから1個ずつ必要なアプリをインストール
– Wi-Fi情報の手動入力

元記事を表示

[SwiftUI] iOSバージョンごとにSF Symbolsを変更する方法

# はじめに

iOS 18から新しいSF Symbolsが登場しましたが、アップデートしていない端末ではアイコンが何も表示されない問題に直面しました。ここでは、iOSバージョンごとに異なるSF Symbolsを表示する方法を紹介します。実装自体かなり簡単なので、役に立てていただければと思います。

# 実装

“`swift
import SwiftUI

struct ContentView: View {
var body: some View {
// iOSのバージョンによって使用するSF Symbolsを変更
if #available(iOS 18, *) {
// iOS 18以上の場合
Image(systemName: “numbers”)
.font(.largeTitle)
} else {
// iOS 18未満の場合
Image(systemName: “arrow.2.c

元記事を表示

AndroidエンジニアのためのXcodeショートカット

# はじめに
今回は、AndroidStudioでよく使うショートカットのXCode版を紹介していきます
### 本文

読み出し先検索

AndroidStudioでは、関数などの実行箇所や実装箇所を探すのにはcmd+clickですが、XCodeではcmd+Clickが使えるのは関数などの実装箇所のみで実際に呼び出している場所を探すのには該当関数を選択した状態でctr+cmd+shift+hを押す必要があります。
押しづらい上に覚えにくいので、SideBarにある虫眼鏡アイコンからCall Hierarchyで検索する方も多いみたいです。

File検索

AndroidStudioではShift2回押しでファイルを検索できますが、XCodeではshift+cmd+oでプロジェクト内のファイル検索ができます

コード整形

AndroidStudioではcmd+opt+Lでファイル内のコードを整形できますが、XCodeではctr+Iで整形することができます
### 最後に
備忘録としての役割が非常に強いですが、どなたかのお役に立てれば幸いです
AndroidStud

元記事を表示

ジョブズの伝説的スピーチを知らない世代へ

## はじめに
13年前の今日、2011年10月5日は、あのスティーブ・ジョブズがこの世を去った日です。

スティーブ・ジョブズと聞くと、多くの人がAppleやiPhoneを思い浮かべるかもしれません。
彼自身をよく知らない人や、名前は知っているがその人生までは知らない人も、彼の歩んできた道からは多くの教訓を学ぶことができます。
2005年にスタンフォード大学の卒業式で行った伝説的なスピーチ「3つの話」では、彼の経験を通じて人生の大切な教訓が語られています。

この記事では、そのスピーチから「点を繋げること」「愛と喪失」「死」という3つのテーマを詳しく掘り下げ、ジョブズの偉大さを改めて讃えながら、彼のメッセージについて解説していきます。

![steve_jobs.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3552881/4e67f674-53ec-1e58-39c1-edc96bd7ed0d.jpeg)

## 点を繋げること
### 大学を中退した理由
ジョブズは大学を中退しています。それには複

元記事を表示

【iOS/macOS】iPhone / Mac メニューバーでテレビをみる

はい、緊急で書きました。

いろんなことできますね、ネットは。

デコードかキャッシュか、1分遅れです。

(更新中…)

【ffmpeg】VP9 コーデックから H.264 コーデックへの動画変換

元記事を表示

FlutterのshowDialogのAlertDialogサンプル

– Android、iOS用でそれぞれ環境に合うDialogを出力する
“`dart
import ‘dart:io’;
import ‘package:flutter/cupertino.dart’;
import ‘package:flutter/material.dart’;

class CommonDialogView {
static Future show(BuildContext context, String text) {
return Platform.isIOS
? _showCupertinoDialog(context, text)
: _showMaterialDialog(context, text);
}

static Future _showCupertinoDialog(
BuildContext context, String text) {
return showCupe

元記事を表示

SwiftUIのAnimationについてふわっと学ぶ(transition編)

# はじめに
SwiftUIでAnimationさせるときにtransitionというModifierを見かけたのですが、これが何をやっているのかよくわかっていなかったので、ふわっと学びたいと思います。

# 環境
– Xcode16
– iOS17

# transitionとは
公式のドキュメントによると、Viewの表示、非表示切り替えの際のAnimationを制御するModifireのようです。

https://developer.apple.com/documentation/swiftui/view/transition(_:)-5h5h0

>このビューが表示されたり消えたりすると、トランジションが適用され、アニメーション化が可能になります。
>次のコードは、条件に応じて MyView を表示し、表示または非表示になったときにスライド遷移を使用して表示します。
>“`
>if isActive {
> MyView()
> .transition(.slide)
>}
>Button(“Toggle”) {
> withAnimation {

元記事を表示

iOSアプリをAppStoreConnectに登録するまで

# 目次
1. はじめに
2. 前提
3. 環境
4. 実施したこと
1. App ID作成
2. 証明書の設定
3. AppStoreConnectへの登録
5. 最後に
6. 参考

## 1.はじめに
iOSエンジニアなのにiOSアプリをAppStoreに公開する方法を知らなかったので、どんなことをやる必要があるのか、実際に調べて、試してみました!
この記事では、AppStoreConnectに登録するまでに実施したことを紹介します。

**公開までの大まかな流れ**
1. AppStoreConnectに登録
2. AppStoreに申請
3. AppStoreに公開
* 申請が通ると、AppStoreに公開可能となる

**そもそもAppStoreConnectとは?**
AppStoreConnectとは、Appleが提供しているアプリの管理や申請を行うためのツールです。
アプリの名前や製造者名などを登録して申請することで、AppStoreに公開しても問題ないか確認することができます。
申請だけではなく、アプリの価格や年齢制限などの管理も

元記事を表示

SafariのみCookieからデータ取得できない現象に苦しめられた話

## 背景
toC向けのフォームにて広告等流入経路識別のために独自IDを割り振り、URLパラメータへそれぞれ埋め込んでいた。

## どんな仕組みか
各経路からWebフォームへ遷移する際にURLパラメータの各情報をCookieへ格納。その後コンバージョンでパラメータも併せて送信することで流入経路の識別に活用していた。

## 問題点

### プライバシーの観点から、トラッキングやCookie無効化設定をしているユーザが増えている
Cookieありきで構築したシステムの信頼性が揺らいでおり、フローの調整が必要

### Cookie利用可否判定のロジックが十分でない
元々は以下のようにdocuent.cookieの中身をチェックして判定していた。

“`js
if(document.cookie != “”){
//処理
}
“`

GTM・GAを利用していたこともあり、document.cookieが空のままフォームを訪れる状況は想定外だった。
ただし昨今のSafariではサードパーティスクリプトの呼び出しをブロック、または遅延させるようになっているようで、ユーザの初回訪問時に上

元記事を表示

iOSのテストを自動化してみる

# 実現したいこと
あくまでiosアプリを自動的に操作して、自動的にエビデンスを取る仕組みを作りたいということ。
内部結合・外部結合といった感じで内容によっては自動化できないものもあるがそこはまた別の機会に。

# 環境構築
※Mac bookのm1 Pro
– maestroを入れる
– javaを入れる
– Facebook IDBを入れる(iOS自動化をお助け)

# 自動化してみる

以下のコマンドを実行し、シミュレーターを開く
“`
open -a Simulator
“`

サンプルを落とす
“`
maestro download-samples
“`

以下を実行して、サンプルアプリをシミュレーターにインストールする。
“`
cd samples
unzip sample.zip
xcrun simctl install Booted Wikipedia.app
“`

サンプルを実行したらこのように開かれる。
“`
maestro test ios-flow.yaml
“`
![image.png](https://qiita-image-stor

元記事を表示

MacBook Air 最低構成でも快適に開発できるtips三選

**アプリ開発って高いスペックを要求される場合がありますよね。**

iOSアプリの開発を行なっているイッセーです。

現在、最低構成のMacBook Airでアプリ開発をしています。スペックは以下の通りです。

・チップ:**M1**, **8コアCPU**
・メモリ:**8GB**
・ストレージ:**256GB**

正直ハイスペックのMacに買い替えたいのですが、そう簡単にはいきませんよね…

でも、少ないリソースでも効率的に開発できる方法を工夫すれば、十分に快適な環境を作れます。

てことで、如何にして低いスペックのMacでも快適に開発ができるか日々研究している私が、実践しているtipsを三つ紹介します。

## 使わないアプリは終了する
![スクリーンショット 2024-09-22 10.09.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3572387/d36bbc70-0df8-2b39-902b-5f367f369c9c.png)

まずは**メモリ対策**です。

元記事を表示

FlutterでWarning: CocoaPods minimum required version 1.10.0 or greater not installed. Skipping pod install. CocoaPods is a package manager for iOS or macOS platform code. Without CocoaPods, plugins will not work on iOS or macOS. の解決方法

# はじめに
IOSのエミュレーターでビルド中に以下のエラーが出てなかなか解決できなかったのですがどすこい塾のかたに聞いたところ一発で解決できたので皆さんにも共有していきたいなと思います。
#### エラー内容
“`
Warning: CocoaPods minimum required version 1.10.0 or greater not installed. Skipping pod install.
CocoaPods is a package manager for iOS or macOS platform code.
Without CocoaPods, plugins will not work on iOS or macOS.
For more info, see https://flutter.dev/to/platform-plugins
To update CocoaPods, see https://guides.cocoapods.org/using/getting-started.html#updating-cocoapods
Cocoa

元記事を表示

iOSとAndroidでPWAをサポート

*この記事は韓国語から翻訳したものです。不十分な部分があれば、いつでもフィードバックをいただければありがたいです! ([オリジナル記事](https://blog.chungjungsoo.dev/dev-posts/pwa-support/), 同じく私が作成しました。)*

今回、[バスハニャーンサービス](https://hybus.app)をリニューアルしながら、PWAをより良くサポートするための努力を書いてみたいと思います。

## PWAとは?

PWAとはProgressive Web Appの略です。

Web環境でのサービスは比較的発見されやすく、他の人にリンク一つで簡単に共有できる特徴があります。

一方、Nativeアプリのような場合には、システムにインストールする方式なので、ユーザーエクスペリエンスを最大化することができ、アプリドロワーからアプリアイコンをクリックして簡単にアクセスできるという特徴がある。また、Nativeはオフラインでも使用が可能です。

PWAはNativeのこのような長所をWeb環境でも同様にサポートすることができます。

バスハニャーンは

元記事を表示

【Flutter】Flutter 3.24.0にアップデートした際に発生したビルドエラーの解決方法

## はじめに
Flutter 3.24.0にアップデートした際に発生したビルドエラーの解決方法についてまとめます。

この記事は、私自身の環境で直面したエラーとその解決方法を記載しています。
依存関係やバージョンによって異なるエラーが発生する可能性があるため、その際にはエラーメッセージをもとに適切な対応方法をお探しいただければと思います。

また、ここで紹介する方法が最適解というわけではないかもしれないので参考程度にご覧いただけると幸いです。

## 前提
Flutter 3.16 ⇨ 3.19以降では`build.gradle`の記述方法が変更されており、その影響で発生するエラーや対応策について詳しくは、[こちらの記事](https://flutter.salon/error_warning/flutter-3-19-with-android/)や[公式](https://docs.flutter.dev/release/breaking-changes/flutter-gradle-plugin-apply)で解説されています。この変更点を理解しておくことで、ビルドエラーの解決が

元記事を表示

UICollectionViewCompositionalLayoutで1つのgroup内のCellの高さを合わせる方法 uniformAcrossSiblings

# `UICollectionViewCompositionalLayout`で全てのCellの高さを合わせる方法 [uniformAcrossSiblings](https://developer.apple.com/documentation/uikit/nscollectionlayoutdimension/4173072-uniformacrosssiblings)

[uniformAcrossSiblings](https://developer.apple.com/documentation/uikit/nscollectionlayoutdimension/4173072-uniformacrosssiblings)を紹介します。

[What’s new in UIKit](https://developer.apple.com/jp/videos/play/wwdc2023/10055/)で紹介されていたものです。

`NSCollectionLayoutSize`の高さを`estimated`にすると、Cellの高さに応じてitemやgroupの高さが変化します。

元記事を表示

macOS SequoiaにアップデートしてXcodeもアップデートしたらFlutterで困ったのでメモ

# はじめに

macOSアップデートしたらトラブったので、今後のためにメモしておく。
勘違いもいくつかあったのもあったので。
今回はホント自分への戒め的なもの。

# 発生したこと解決のメモ
macOSをSequoiaにアップデートしてXcodeもアップデート。
そうしたら、使用しているFlutterのプラグインでエラーが発生。
問題解決につながったと思われることを書いておく。

Podfileのplatformを12.0から13.0に変更
https://t.co/em3r9phU9g のissueにある Allow Non-modular Includes In Framework Modules をYesにするを実施。

以下を実施(多分やらなくても問題ない事もやってるかも)
“`
flutter pub upgrade
flutter upgrade
cd ios
rm -rf ~/Library/Caches/CoccoaPodsrm
rm -rf Pods
rm -rf Podfile.lock
pod repo update
pod install
“`

# 勘

元記事を表示

OTHERカテゴリの最新記事