2024年10月18日金曜日

iPhone で UTM を使って Ubuntu を起動してみる

iPhone で UTM を使って Ubuntu を起動してみる

概要

AltStore + UTM で試してみました
JIT が使えないと恐ろしく遅いので JIT を有効化してから UTM を起動します

環境

  • iPhone14 (iOS 18.0.1)
  • macOS 15.0.1
  • AltServer 1.7.2
  • UTM (install via AltStore)
  • Python 3.9.6 (system installed)
  • Ubuntu 24.04 LTS

pymobiledevice3 のインストール

  • pyenv global system
  • python3 -m pip install -U pymobiledevice3==2.30.0
  • python3 -m pip install -U construct==2.10.69
  • python3 -m pip install -U qh3==0.15.1

iPhone と Mac の有線接続

今のところ JIT の有効化は有線のみサポートしているようです

JIT の有効化

AltServer を起動し有効にします

AltServer -> Enable JIT -> iPhone -> UTM

有効にできると以下のようなメッセージが出てきます
また権限を許可するダイアログが途中で表示されるので許可します

Ubuntu イメージのダウンロード

Ubuntu の iso イメージをダウンロードします
Ubuntu の公式から iPhone でダウンロードします

ファイル名は ubuntu-24.04.1-live-server-amd64.iso でファイルサイズは約2.5GB でした

UTM の起動とエミュレートの作成

UTM アプリを起動します
iPhone には Linux カーネルがなくVM は作成できないのでエミュレートで追加します

  • 左上プラスボタン
  • エミュレート
  • Linux
  • カーネルイメージから起動 -> オフ
    • 起動 ISO イメージ -> 選択 -> ubuntu-24.04.1-live-server-amd64.iso を選択
    • iso は Safari でダウンロードした場合は iCloud 内にあります
  • マシン設定
    • アーキテクチャ -> ARM64
    • システム -> Standard PC (q35)
    • メモリ -> 512MiB
    • CPU コア数 -> 4
    • ディスクサイズ -> 8GB
    • 共有ディレクトリ -> なし

Ubuntu 起動

あとは一覧から起動するだけです
事前に Bluetooth キーボードなどを設定しておくと操作が楽になります

「Display output is not active」が表示されますがしばらくすると起動するので待っていれば OK です

cloud-init の実行が完了すると以下のように Ubuntu のインストールが開始されます

最後に

AltServer の JIT 機能を使って iPhone 上で Ubuntu をエミューレートしてみました
JIT を使えば動かないことはないですがかなり遅い感じはします
また作業中はかなり iPhone が熱くなるので注意が必要です

もっと軽量でインストール不要の OS ならサクサク動くかもしれません
あとは iPhone14 ではなく iPhone15 や Pro Max などスペックの高い iPhone なら動くかもしれません

参考サイト

2024年10月17日木曜日

東京メトロの時刻表は JSON API で取得できる

東京メトロの時刻表は JSON API で取得できる

概要

取得方法を紹介します

環境

  • macOS 15.0.1
  • curl 8.10.0

方法

  • curl https://transfer.tokyometro.jp/api/timetable?numbering=M25&lang=ja

長いの json の内容は省略しますがだいたい以下の情報が含まれています

  • 駅名
  • 行先き (上下線)
  • 行先きに対する時刻表 (平日/休日)
  • 時刻表は以下のデータが含まれています
{
  "time": "2024-10-07T05:00:00+09:00",
  "id": "82430103",
  "train_no": "A501",
  "type": "",
  "train_name": "",
  "departure": true,
  "previous_departure": false,
  "color": "#000000",
  "destinations": [
    "荻窪"
  ]
}

最後に

Web スクレーピングする必要がないので結構便利です

2024年10月16日水曜日

iOS アプリの entitlements を確認する方法

iOS アプリの entitlements を確認する方法

概要

コマンドで取得する方法を紹介します
ipa ファイルではなく app ファイルに対して行うのがポイントです

環境

  • macOS 15.0.1
  • Xcode 16.0

コマンド

  • codesign -d --entitlements :- app_name.app | xmllint --format -
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "https://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>application-identifier</key>
    <string>your.app.identifier</string>
    <key>com.apple.developer.team-identifier</key>
    <string>xxxxxx</string>
    <key>get-task-allow</key>
    <true/>
  </dict>
</plist>

Xcode であれば

~/Library/Developer/Xcode/DerivedData/app_name-cuzoqdebxqlaksegeoxfmmsaetqz/Build/Products/Debug-iphoneos/app_name.app

に archive ビルドした app ファイルがあります

2024年10月15日火曜日

サブアカウント用の Apple ID を新規で作成する方法

サブアカウント用の Apple ID を新規で作成する方法

概要

ここ https://account.apple.com/account から作成するだけです

環境

  • macOS 15.0.1

ポイント

  • 異なるメールアドレスが必要
  • 電話番号は同一でも OK

最後に

サブアカウントが必要になるケースがあるのでその場合は作成しましょう

2024年10月14日月曜日

朝の目覚ましにプレイリストのランダム再生を使うオートメーションの設定

朝の目覚ましにプレイリストのランダム再生を使うオートメーションの設定

概要

忘れるのでメモ

環境

  • iPhone 14
  • iOS 18.0.1

アクションの内容

上から順番にアクション名は

  • 音量を設定
  • プレイリストを取得
  • ミュージックを検索
  • ミュージックを再生

最後に

iOS のバージョンによってアクション名の表記に若干違いがある可能性があるので注意です

参考サイト

2024年10月13日日曜日

iOS アプリが必要としているパーミッションの一覧を取得する方法

iOS アプリが必要としているパーミッションの一覧を取得する方法

概要

アプリがどんなパーミッションを必要としているか確認するときに使えます
おまけでバージョン各種バージョン情報を取得するコマンドも掲載します

環境

  • macOS 15.0.1
  • Xcode 16.0

コマンド

for i in `find . -name "Info.plist" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'UsageDescription'; done

CFBundleVersion を確認するコマンド

for i in `find . -name "Info.plist" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'CFBundleVersion'; done

or

for i in `find . -name "*.pbxproj" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'CURRENT_PROJECT_VERSION'; done

CFBundleShortVersionString を確認するコマンド

for i in `find . -name "Info.plist" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'CFBundleShortVersionString'; done

or

for i in `find . -name "*.pbxproj" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'MARKETING_VERSION'; done

デプロイターゲットバージョンを確認するコマンド

for i in `find . -name "*.pbxproj" | grep -v 'Pods/' | grep -v 'Tests'`; do echo ${i}; plutil -p ${i} | grep 'IPHONEOS_DEPLOYMENT_TARGET'; done

参考サイト

2024年10月12日土曜日

QIDI X-Smart のノズル交換手順

QIDI X-Smart のノズル交換手順

概要

購入から4年ほどたちノズルがよく詰まるようになったので交換してみました

環境

  • QIDI X-Smart
  • 六角ドライバ 2mm、2.5mm
  • 付属の交換セット (レンチ、サポート用ネジ、交換用ノズル)

カバーを外す

2mm の六角ドライバを使います

上にネジが一つあるので外します

あとは上に上げればカバーが取れます
平らなケーブルとつながっておりそこに引っ掛かるかもしれないので気をつけます

モーター部分を外す

2.5mm の六角ドライバを使います

後ろ部分に二箇所ネジがあるので外します

ネジが外れるとこんな感じであとは上からモーターがスポっと取れます

モーターに電力を供給する平らなケーブルがあるので外します
ケーブルの左右に固定しているボタンがあるのでこれを押しながらゆっくり抜けば OK です
入れるときは差し込むだけで OK です

ノズルを外す

ノズル部分を外していきます
支え用のネジとレンチを使っていきます

支え用のネジを取り付けてレンチで回していきます
4年も交換してなかったのでかなり固くなっているので大変でした
最初はトンカチで衝撃を加えて回していきました
ある程度トンカチで緩めたらあとは支え用のネジとレンチを逆方向(ネジは時計回り、ノズルのレンチは反時計回り)に回しながら外せば OK です

ここが一番大変だと思います

ノズルの交換と掃除

最後までレンチで緩めるとノズルが外れます

ノズルのプラスチック部分も抜けにくくなっているのでペンチでテコを使いつつ抜くと簡単です

ノズル部分もフィラメントの焦げがありかなり汚れています
またプラスチックのノズル部分は中に焦げがたまっている状態でした
さらにその焦げのせいで溶けてないフィラメントもつまっていました

今回はこのプラスチック部分だけ交換します

つまりがないかチェック

ちょっとわかりにくいですがフィラメントが写真のように貫通する状態にならないとどこかしらでフィラメントが詰まっていることになります
自分は内部に折れたフィラメントが詰まっている状態になってしまっていたのでフィラメントを手動で挿管して上から押して詰まっているフィラメントを外しました

手動で挿管する場合はバネのような挿管パーツがありそれを使って挿管する必要があるので注意しましょう

無事モーターの挿入口から排出口までフィラメントが通れば完了です

最後に、教訓

今回フィラメントが詰まった原因は以下でした

  • ノズルのプラスチック部分に焦げがたまりプラスチック部分にフィラメントがつまった
  • モーター内部にも折れたフィラメントがつまりフィラメントを挿管できない状態になっていた

これの特に「折れたフィラメント」というのがポイントでフィラメントは湿度に弱く水分を含むと簡単に折れる状態になってしまいます
今回自分はその非常に折れやすくなったフィラメントを使ってプリントしてしまいノズルを詰まらせてしまいました

極論を言うと折れやすいフィラメントは絶対に3Dプリンタで使ってはいけません
折れやすいフィラメントかどうか判断する材料として以下があります

  • フィラメントをセットするときに「パキパキ」と音を立てながら挿管されている
  • セット時にフィラメントが出るか確認する際につながってフィラメントが排出されずに水のようにポタポタと落ちてくる
  • プリント中にフィラメントが折れて終了してしまう

このような現象が確認できる場合にはそのフィラメントは使わないようにしましょう
自分はそうだったのですが細かく折れたフィラメントがモーター内部にかなり溜まっており最悪故障につながるところでした

一応折れやすくなったフィラメントを復活させる方法はあるらしいのですが結局詰まる可能性もあるので素直に新しいものを買うのがいいかなと思います