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

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

[Swift]RxSwiftの導入(CocoaPods)

# RxSwiftとは
RxSwiftとはリアクティブプログラミングを実現するためのライブラリを提供してくれます。
リアクティブプログラミングとは、一言で説明すると
**「何かの値が変化したら、その変化に応じて素早く自動的に何かのアクションを行う」**
です。
– ID・PWを全て入力し終えたら、ログインボタンを活性させる
– PW設定において非推奨の文字が入力されたら警告を表示させる
– お天気アプリなどで検索対象の地域を設定したら、その地域の天気情報を表示させる

もっと身近な例で例えるとExcelで「ある値を入力すると自動で計算結果が変更される」ようなイメージです。
学習コストが高く私自身まだまだ経験、理解が浅い状況ですので少しずつアプトプットを進めていきます。

## RxSwiftを導入してみる。
今回RxSwiftとRxCocoaをCocoaPodsで導入していきます。
`SettingRxSwift`サンプルPJを作成し、導入までの流れを記入していきます。

### 1️⃣podファイルを生成
-下記のコマンドをターミナルで実行します。
“`title.Swift
po

元記事を表示

Flutter で share_plus を利用してシェア機能を実装する

# これなに
Flutter でのシェア機能実装の備忘録

# 利用するパッケージ
### 必須

今回の実装のキーパッケージ、OSのシェア機能を利用可能にする

https://pub.dev/packages/share_plus

### 任意

具体的な実装の際に画像ファイル取得のために利用しただけなので、ファイルピッカーから取得しても良いと思う

https://pub.dev/packages/screenshot

# モジュール化したコード
– `flutter pub add share_plus` でパッケージを取得
– メソッド化した以下のコードを呼び出して共有を実装
– 画像とシェアするときのメッセージにあたる image, subject は任意に設定
– text は必須にしている
“`dart
import ‘package:flutter/material.dart’;
import ‘package:share_plus/share_plus.dart’;

class ShareImageAndTextController {
void s

元記事を表示

DateComponentsを使って現在の年月を表示する

DateComponentsを使って現在の年月を表示する方法です。

# 完成イメージ

![Simulator Screenshot – iPhone 15 Pro – 2024-08-15 at 14.57.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/274615/6af09567-2df8-1177-1cd1-8b7f7a43e44a.png)

# 実装方法
`DateComponents`の`extension`を作成します
“`.swift
extension DateComponents {
func getYearMonthFormat() -> String {
if let monthString = month, let yearString = year {
return String(format: “\(yearString)-%02d”, monthString)
}
return “

元記事を表示

ASWebAuthenticationSession の実装でハマったこと

## 概要
ざっと2年前、ASWebAuthenticationSessionでSSOを実装した際にハマったことを記載する
故にこの記事では実装についての説明はしない
他にいい記事がたくさんあるのでそちらを参考にしてほしい
私のハマりが誰かのハマり解消に貢献できることを祈りQiitaの海に本記事を投稿する

#### ASWebAuthenticationSessionとは?
Appleが提供するSSOフレームワーク
SafariとCookie情報を共有し認証情報を使い回すことでSSOが可能となる

公式ドキュメントは[こちら](https://developer.apple.com/jp/documentation/authenticationservices/authenticating_a_user_through_a_web_service/)

#### 当時ハマったこと
ということで本題

– ***ASWebAuthenticationSessionのCookieの扱いに注意!!***
永続Cookieのみ対象!
非永続CookieはSafariと共有しないので注意が必

元記事を表示

【Flutter】Releaseモードでiosをビルドする

## はじめに
iOSで実機ビルドしたが、ケーブルを外すと途端に動かなくなりました💦💦
原因を見てみると、デバッグモードでビルドされていたためにケーブルを外すと動かなくなったようです。そのため、今回はRelaseモードでビルドする方法を紹介します。

## やりかた

1. Xcodeの「Product」メニューを確認:
「Product」→「Scheme」→「Edit Scheme…」をクリックします。

2. Edit Schemeウィンドウで確認:
左側のリストから「Run」を選択し、右側の「Build Configuration」が「Release」になっているか確認します。
デフォルトでは「Debug」になっていることが多いので、「Release」に変更してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/599049/7421c897-96fb-16fc-aebb-ac95cb2fbc75.png)

3. ビルドを実行

## 参考
https:/

元記事を表示

Flutter環境構築手順書(M1 Mac)

## Flutter SDK インストール

– flutterファイルをダウンロード
– https://docs.flutter.dev/get-started/install/macos/mobile-ios

– 通常ダウンロードフォルダにダウンロードされているはずなので、developmentフォルダに解凍する

“`bash
$ unzip ~/Downloads/flutter_macos_arm64_3.24.1-stable.zip \
-d ~/development/
“`

– PATHを通す
“`bash
$ vim ~/.zshrc

// 以下を.zshrcに追加
export PATH=$HOME/development/flutter/bin:$PATH

$ which flutter
/Users/ユーザ名/development/flutter/bin/flutter

$ which d

元記事を表示

【Skip】SwiftでAndroidアプリも開発できちゃうゾ!

## はじめに
先日Skipのバージョン1.0がリリースされました。
SkipとはSwiftでAndroidアプリも作れちゃうよというやつですね。早速ちょっとだけ触ってみたので、サンプルアプリをビルドするまでを記事にしてみます。
SwiftでiOS、Android両方開発できるのはSwift出身の僕にとっては最高ですね。

#### 公式

https://skip.tools/

## 実際に動かしてみよう
### 1.Skipで開発する環境を整える
#### Skipのインストール

以下のコマンドでSkipをインストールしましょう
“`
brew install skiptools/skip/skip
“`

次に以下のコマンドでSkipが動くかどうかをチェックします

“`
skip checkup
“`

僕は以下のように“`Java version“`のところでエラーがでましたが、特に問題なくSkipを使って両OSのビルドができました。今後どこかで困るのかもしれません。

![スクリーンショット 2024-08-24 14.44.07.png](https://

元記事を表示

Flutter でセキュアに Key/Value を保存する

# はじめに
アプリを開発していると設定などを Key/Value として保存するケースが多く、簡単に実現する場合は [shared_preferences](https://pub.dev/packages/shared_preferences) パッケージを使うことで簡単に実現できます。
しかし、多くの場合で平文は避けたいこともあり、暗号化して保存したいということになります。
Flutter には、 [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) という KeyChain などを利用してセキュアに保存できるパッケージもありますが、この保存された値はアプリをアンインストールしても消えないというデメリット?もあります。

そこで、これらを組み合わせることで、セキュアでかつ簡単に Key/Value を保存できるようにしてみました。

# 実装
## 利用する Flutter Packages
以下の3つのパッケージを導入します。
“`pubspec.yaml
dependencies:

元記事を表示

jig.jpinternship

iii

元記事を表示

iOS開発における、ボタンなどのTintColorデフォルト値が青色である理由を考えてみた

# はじめに
こんにちは。私は徳島大学院で物質機能化学の研究を行っている修士2年の[akidon0000](https://x.com/akidon0000)です。

↓趣味でこんなアプリ開発を行なっています

https://qiita.com/akidon0000/items/5dab4e425796d6e32f8a

このアプリを開発している時に、ふと思ったことがあります。

それは、

`なぜデフォルトが青色!?`

ということです。

ここで指している「デフォルト」とは、ボタンのTintColorのことを意味しています。

私は、これらをそのまま実装してしまうと

・安っぽい(チープ)
・初心者っぽい

となる印象を抱いており、そのために無闇に色を変更したことが何度もありました。
![スクリーンショット 2024

元記事を表示

Xcode 15.3/15.4で発生する`Package.resolved`の削除問題について

Xcode 15.3および15.4で、git ブランチの変更や `pod install` など、リポジトリに変更を加えるたびに、ワークスペースの `Package.resolved` が削除されてしまう現象が報告されています。この問題により、ビルド時にSwift Package Manager (SPM)で管理しているライブラリが一部削除され、ビルドエラーが発生するケースが確認されています。本記事では、この現象の再現手順と対処方法について解説します。

## 再現手順

以下の手順で問題を再現することができます。

1. `pod install` を実行する。
2. Xcodeでプロジェクトをビルドする。ビルドエラーが発生し、エラーログが表示される。
3. Xcodeで「Resolve Package Versions」を実行すると、エラーが解消される。しかし、この方法ではキャッシュを削除しても問題は完全に解決しません。

## 問題の詳細

この問題は、`pod install` やgitブランチの切り替えを行う際に、`Package.resolved` が意図せず削除されること

元記事を表示

【SwiftUI】アニメーションとトランジションを組み合わせて連続して使う

こんなカクカクのメッセージ的な表示。

![sc 2024-08-23 at 11.20.52.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/588914/3617e8dd-4365-3ace-7b55-f6fe230b78bf.gif)

“`swift
import SwiftUI

struct Message: View {
var text: String

@State private var showIcon = false
@State private var showText = false

var body: some View {
HStack(spacing: 0) {
if showIcon {
Image(systemName: “heart.fill”)
.foregroundStyle(.red)
.font(.title)
.padding()

元記事を表示

iOSDC 2024セッション資料まとめ

https://iosdc.jp/2024/

iOSDC2024の登壇資料、スライドのまとめです。
X等で見つけ次第掲載しますが、もし資料を見かけた方or資料を公開した登壇者の方がいらっしゃいましたら、コメント等でお声がけください。

# Day 0
## Track B
### [App Clipの魔法: iOSデザイン開発の新時代](https://fortee.jp/iosdc-japan-2024/proposal/66f33ab0-0d73-479a-855b-058e41e1379b)

### [StoreKit 2によるモダンなアプリ内課金](https://fortee.jp/iosdc-japan-2024/proposal/370206f7-82a4-4f7d-800e-995dc58178a6)
https://speakerdeck.com/0si43/storekit-2n

元記事を表示

HTTP Catcher を使って iPhone だけで通信を書き換える

# はじめに

開発をしていると、通信内容を見てデバッグするという状況はかなりあると思います。

特にモバイル開発だと、パソコンを介して通信を覗くのが一般的で、そのためのプロキシツールが多く存在します。以下は今までに私が使用してきたものです。

https://www.charlesproxy.com/

https://mitmproxy.org/

https://proxyman.io/

これらのツールは無料で多くのことができますが、**設定するのが少し面倒な側面**もあります。

## 課題

特にリモートワークが増えた昨今では、社外からの接続のためにVPNを繋ぐ会社も多いと思います。

その時に

– 端末のWifiを接続先PCと同じに切り替える
– 繋ぐためにその都度でIPとポートを手動入力する
– 社内ではうまく動作していたのにVPNとバッティングして動かない
– 同僚は繋がるのに、なんか知らんけど自分のは動かない(冗談のようであるw)

パソコンを経由せずに**直接スマホで通信を監視**すれば良いじゃないかという話です!この煩わしさから解放されるために便利なのが *

元記事を表示

Unit Testを始めよう①~DI・モック・スタブ・Modelのテスト~

# はじめに
テストコードを学び始めたばかりの時、テストコードを書くの難しい、何をテストしたら良いかわからないと思っていました。現役のiOSエンジニアの方々にアドバイスをいただきながら学習を進める中でテストコードのありがたみが少し理解できたので、**MVVMの設計で作成したAPI通信のサンプルアプリのコードを用いてUnit Testの始め方**を紹介します。
GitHub: https://github.com/hinakkograshi/QiitaViewer
# 用語の説明
### Dependency Injection(DI・依存性注入)
依存している部分を外から注入する!「あるオブジェクトが別のオブジェクトに依存している場合、その依存関係を外部から注入することによってオブジェクト間の結合度を低くし、柔軟性を持たせる」
今回の例では外部に依存しているURLSessionモックオブジェクトを外から注入することで、サーバー環境に関わらずテストを実行することが可能になります。
### モック
ダミー・偽物を作成
### スタブ
特定の処理を差し替え、任意の値を返すようにする

# テ

元記事を表示

【fastlaneエラー解消】[!] Your current version () does not respect the format A or A.B or A.B.C

## 解決方法
#### info.plistにCFBundleShortVersionStringとCFBundleVersionを追加する。

#### info.plistをコードで開く
![スクリーンショット 2024-08-20 8.56.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2883687/0028dac4-fee5-643b-a1f3-0f6c640e5257.png)

#### CFBundleShortVersionStringとCFBundleVersionを追加
“`

元記事を表示

【fastlaneエラー解消】Exception caught. *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil (-1010) [Application Loader Error Output]: The call to the altool completed with a non-zero exit status: 1. This indicates a failure.

Error uploading ipa file: [Application Loader Error Output]: Exception caught. *** -[__NSArrayM insertObject:atIndex:]: object cannot be nil (-1010) [Application Loader Error Output]: The call to the altool completed with a non-zero exit status: 1. This indicates a failure.
エラー解消
## 解決方法
私の場合は間違ったバージョン番号が使用されたことが原因でした。

“`
default_platform(:ios)

platform :ios do
desc “Releaseビルド”
lane :release_build do
increment_build_number(xcodeproj: “TEST.xcodeproj”)
increment_version_number(bu

元記事を表示

[Flutter] 文字サイズを大きくすると周囲に空白が発生する

## 今回発生した問題

今回発生した問題はタイトル通り、Flutterでアプリを開発時にfontSizeを大きくしていくと周囲に空白が発生するというもの



iPhone 15 - 2024-08-19 at 11.36.40.png
font: Kiwi-Maru, fontsize: 50で発生。PaddingやGapを設定していないにも関わらず、文字の上に空白ができている



コードは以下の通り
“`sample.dart
Container(
color: Colors.white,
child: Text(
“2”,
style: TextStyle(
font

元記事を表示

FirebaseのGoogleService-Info.plistに含まれる不要なフィールドとは?

## はじめに
Firebaseプロジェクトを作成する際、生成された`GoogleService-Info.plist`ファイルを眺めていると、
– `IS_ANALYTICS_ENABLED(デフォルトでfalse)`
– `IS_APPINVITE_ENABLED(デフォルトでtrue)`
等が「これって何の設定なんだろう?」と思い、[Firebaseドキュメント](https://firebase.google.com/docs?hl=ja)を調べても、具体的な使い方が見つからず、疑問が膨らんでいきました。

以下はその一例です(値はサンプルです)。

“`GoogleService-Info.plist


API_KEY

元記事を表示

学生の50%以上が使う大学非公認アプリを作った話

# はじめに
こんにちは。 私は徳島大学院で物質機能化学の研究を行っている修士2年の[akidon0000](https://x.com/akidon0000)です。

私は3年前に個人で徳島大学生向けに **「トクメモ+」** というアプリをiOS、Androidで開発し、

・ダウンロード数 5200件
・MAU 3259ユーザー (徳大学部生の **約56%**)

のアプリを大学非公認で運用しています。

:::note info
本記事は、**「トクメモ+」** がどういった経緯で開発され、どんな活動をしてきたのかをまとめたものです。
:::

# トクメモ+についての発表スライド

https://speakerdeck.com/akidon0000/xue-sheng-puroziekutoyun-ying

元記事を表示

OTHERカテゴリの最新記事