2023年7月24日月曜日

iOS Xcode ドキュメンテーションコメントを追加するショートカットキーを紹介

メソッドの上部で option + command + / を入力すると、自動でドキュメンテーションコメントが追加されます。

あとで見返すときのために、「何をするメソッドか」「引数にはどんな値が必要か、どういう値が想定されているか」「戻り値は何か」などを記入しておきましょう。

参考

2023年7月23日日曜日

Android 共有ボタンのデータを受け取る、送信する

どうも。どっことです。今回は共有ボタンの実装について解説します。

X(旧:Twitter)でのポストやブログの記事など、Webにはいたる所に共有ボタンがあります。今回は共有ボタンによりデータが送信された時にアプリ側でそれを受け取るための実装と、アプリで共有ボタンを用意する実装をそれぞれ解説していきます。

受け取る側の実装

よくあるBroadcastReceiverの実装パターンです。2つやることがあります。

1つは、AndroidManifest.xmlに共有ボタンによるデータ送信のintentを受け取る宣言を明記します。

<activity android:name=".MainActivity" >
  <intent-filter> 
    <action android:name="android.intent.action.SEND" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="text/plain" />
  </intent-filter>
</activity>

そしてもう一つは、実際に受け取った時の処理です。受け取るActivityBroadcastReceiverに対してインテントフィルターを設定します。Activityでは、メンバ変数として持っているintentを、BroadcastReceiverではBroadcastReceiver#onReceivedの引数として渡されるintentを参照することで、詰められているデータにアクセスすることができます。

override fun onCreate(savedInstanceState: Bundle?) {
  if (intent?.action == Intent.ACTION_SEND) {
    val text = intent.getStringExtra(Intent.EXTRA_TEXT)
    // 良しなにする
  }
}

送る側の実装

こちらもよくあるstartActivity(Intent)の実装です。

ただintentの作り方だけちょっと独特で、共有したいデータを詰めたintentIntent#createChooserに渡します。そうして返されたintentstartActivityで投げます。

val temp: Intent = Intent().apply {
  action = Intent.ACTION_SEND
  putExtra(Intent.EXTRA_TEXT, "テストのテキストです")
  type = "text/plain"
}
startActivity(Intent.createChooser(temp, null))

まとめ

今回は共有ボタンに関するAndroidの実装を解説しました。特に共有ボタンからデータを受け取る処理はアプリを利用してもらう契機として重要なので、参考にしていただけると幸いです。

参考

2023年7月22日土曜日

Swift CocoaPods導入手順をメモ書き程度に紹介

Cocoapodsのインストール

sudo gem install cocoapods

または

sudo gem install -n /usr/local/bin cocoapods

Cocoapodsのセットアップ

インストール完了後、各プロジェクトで利用するためにCocoaPodをセットアップする。

pod setup

その後プロジェクトフォルダでコンソールを開いて以下コマンドを実行する。

pod init

これにより、Podfileが自動生成される。

ライブラリのインストール

自動生成されたPodfileに必要なライブラリの記述し以下を実行。

pod install

初回は上記、2回目以降は以下を使う。

pod update

これにより、.xcworkspaceという拡張子のファイルが生成される。Xcode でプロジェクトを開くときはこのファイルをクリックして開く。

参考

2023年7月21日金曜日

Mac スクリーンショットを撮影するためのショートカットを紹介

どうも。どっことです。Macでスクリーンショットを撮影したいけど、ショートカットキーを忘れて毎回検索しているので、備忘録として紹介します。

画面全体のスクショを撮影する場合

Shift + command + 3

Windowsの printscreen

範囲を指定してスクショを撮影する場合

Shift + command + 4

Windowsの Shift + win + s

ウインドウを指定してスクショを撮影する場合

Shift + command + 4 → Space

Windowsの alt + printscreen

iOS 数値を0埋めしてテキストとして表示する

Androidでは、String.format(text, value)としてテキストを出力させるが、iOSの場合もほぼ同じでStringのコンストラクタに入れるだけ。

let number = 3
let numberString = String(format: "%03d", number) // 003

参考

2023年7月20日木曜日

iOS アラートダイアログを表示するチートシート

iOSでよくあるアラートダイアログを表示する。

let alert = UIAlertController(title: "タイトルテスト", message: "メッセージテスト", preferredStyle: .alert)
// ボタンを追加する
let action = UIAlertAction(title: "ボタン", style: .default, handler: { action in
    /** do something **/
})
// 以下で、ボタンとそのタップ処理を追加する。ボタンは複数追加できる。
alert.addAction(action)
// 表示
present(alert, animated: true)

presentがライフサイクル上でコールするのが早すぎると無視されるので、viewDidAppear()以降のタイミングで呼ぶこと。

参考

2023年7月19日水曜日

iOS Enumの全要素を配列で取得する

enumの定義に、CaseIterable を実装してあげるだけ。

enum Size: CaseIterable {
  case maximum
  case big
  case medium
  case small
  case minimum
}

ってやると、allCasesにアクセスできるようになる

Size.allCases.map { /* do something. */ }

firstIndexでインデックスもとれるようになる

Size.firstIndex(of: .big)!

参考

2023年7月18日火曜日

Android Applicationクラスの実装方法について解説

どうも。どっことです。今回はApplicationクラスの実装方法について解説します。

Applicationクラスとは

アプリが動作するとき、一番最初に動き出すクラスです。このクラスにアプリの初期設定といった各種処理を実装します。外部のライブラリを利用する場合なども、ApplicationクラスのonCreateメソッド内に処理を実装することが多いので、遅かれ早かれAndroidアプリエンジニアの誰もが通る道かと思います。今回はそんなApplicationクラスの実装方法について解説します。

Applicationクラスの実装方法

以下の手順で実装します。

  1. Applicationクラスを継承したCustomApplicationクラスを追加する
  2. AndroidManifest.xmlCustomApplicationクラスを登録する

順番に解説していきます。

Applicationクラスを継承したCustomApplicationクラスを追加する

Applicationクラスを継承したCustomApplicationを追加します。クラス名に制約は無いので、分かりやすい名前を命名してください。

class CustomApplication : Application() {
    override fun onCreate() {
        super.onCreate()
        ... // ライブラリの初期化やテーマの設定などやりたいことをやる
    }
}

AndroidManifestにCustomApplicationクラスを登録する

前手順で追加したCustomApplicationを登録します。AndroidManifest.xmlにあるapplicationタグにname属性で、クラス名を設定してください。

<application
    ....
    android:name=".CustomApplication">
    <-- よくあるよしなに -->
</application>

あとはビルド+インストールし、アプリを起動してあげると、CustomApplication#onCreate()の処理が最初に呼ばれます。Logなどを仕込んで、確認してみてください。

まとめ

今回はApplicationクラスについて解説しました。テーマの設定や各種ライブラリの初期化など、アプリをよりカスタマイズするにあたり必要になっていくクラスなので、使えるようにしておきましょう。


2023年7月17日月曜日

Android 子Viewをはみ出して表示させたい

「表示する領域のViewGroup」に以下を設定する

android:clipChildren="false"

気を付けないといけないのは、領域外に押し込まれるViewの親ではなく、押し込まれた領域のViewGroupに設定する必要があるということ。つまり以下。

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:clipChildren="false" <!-- 押し込まれる領域にclipChildren:falseを設定 -->
   android:layout_height="match_parent">
   <FrameLayout
     android:layout_width="250dp"
     android:layout_height="250dp"
     android:layout_gravity="center">
    
     <View
       android:layout_width="150dp"
       android:layout_height="50dp"
       android:layout_marginTop="-25dp" <!-- 親のFrameLayoutの領域外 -->
       android:background="@android:color/black"
       android:gravity="center" />
  </FrameLayout>
</FrameLayout>

言われてみればそうか、と思うけどちょっと気持ち悪いと思うのは私だけだろうか。

参考

移行予定

どうも。どっことです。 タイトルの通りですが、諸事情により GitHubPage に移行予定です。 https://mkt120.github.io/ この備忘録に記載の内容を転記しつつ、今後はこちらのページを更新していく予定です。