[Swift] 03 自製ヘルスケアapp / ボタン配置, 画面遷移

[Mac mini M1, MacOS Monterey 12.3.1, XCode 13.3.1]

ボタンを配置して見たいデータを選択できるようにしました。ボタンの大きさやレイアウトはこれから調整します。

Gitも並行して学んでいるのでコーディング進度は今一つですが、そのうち慣れるでしょう。ただコードを複製し加工していく作業をするにはGitの痕跡を残す機能は邪魔でしょうがないです。

Gitがあまりにうっとおしいため、VSCodeに戻りPythonのKivyでiOS開発しようかとも思いましたが、HealthKitはSwiftなどAppleネイティブ言語でしか扱えないはずなので思い直しました。編集してすぐにコミットすれば問題ありません。

import SwiftUI
import CoreData

struct ContentView: View {
    @State private var shouldShowSecondView_HR: Bool = false
    @State private var shouldShowSecondView_HRV: Bool = false

    var body: some View {
        NavigationView {
            VStack {
                NavigationLink(destination: ContentView_HR(), isActive: $shouldShowSecondView_HR) {
                    EmptyView()
                }

                Button {
                    shouldShowSecondView_HR = true
                } label: {
                    Text("心拍数")
                }
                 
                NavigationLink(destination: ContentView_HRV(), isActive: $shouldShowSecondView_HRV) {
                    EmptyView()
                }

                Button {
                    shouldShowSecondView_HRV = true
                } label: {
                    Text("心拍変動")
                }
            }
        }
    }
}

[Swift] 02 自製ヘルスケアapp / アイコン設定

[Mac mini M1, MacOS Monterey 12.3.1, XCode 13.3.1]

まずはアプリアイコンをAdobe XDで作り、プロジェクトに登録してみました。

App icon Generatorというサイトで1024*1024ファイルから即席アイコンセット(iPhone 11個, iPad 13個)を作成しましたが、macOS用よりサイズを大きめにする必要があったようで図形が小さくなってしまいました。AppleのサイトからiOS用テンプレを入手して作り直します。

近々自製アプリImageInspector(C++)の機能を拡張し、ワンクリックでiOSアプリ用アイコンセットを作れるようにします。

[Swift] 01 自製ヘルスケアapp / 製作着手

[Mac mini M1, MacOS Monterey 12.3.1, XCode 13.2.1]

Swiftの学習に着手しました。まずは各種ヘルスケアデータの取得方法を学んでいきます。

最初は欲しいコーディング情報が見当たらず右往左往していましたが、わかりやすい日本語サイトが見つかってからは比較的スムーズにBuild&Runできました。

Swiftの印象はポインタのないC++といったところです。難易度はJava以上、C++以下と予想します。構造体データとかC言語の知識がないと苦戦しそうです。

Python, Java, C++と学んできた私にはちょうどいい感じです。

参考サイト

[C++] 49 FLTK : findコマンド生成アプリ/ 大文字小文字区別なし

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

大文字小文字の区別なくgrep検索できるようにしました。オプション –ignore-caseをつけるだけです。なぜか -iではうまくできませんでした。

<該当箇所のみ>
if (onoff_grep == 1){
    const char* grep_char = grep_input->value();
    if (onoff_Aa == 0){
        cmd << "grep --ignore-case -r " << string(grep_char) << " " << string(dir_char);
        std::cout << cmd.str() << endl;
        system((cmd.str()).c_str());
    }else{
        cmd << "grep -r " << string(grep_char) << " " << string(dir_char);
        std::cout << cmd.str() << endl;
        system((cmd.str()).c_str());
    }
    // 件数表示
    cmd << " | wc -l";
    std::cout << cmd.str() << endl;
    system((cmd.str()).c_str());
}

[C++] 47 FLTK : findコマンド生成アプリ/ grep機能

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

最後の仕上げとしてgrep機能(テキスト内文字列検索)を追加しました。

findコマンドと区別するためにgrepの上に長い横線を引きたいのですが、どうもうまくできません。

たかが線を簡単に描画させてくれないFLTK、恐るべしです。JavaのSwingと比較して時間的開発コストは体感的に5〜10倍位といったところでしょうか。気長に取り組まないといらだちを鎮められないですね。線を描くのは基本ですからいずれできるようにします。

アプリの機能も充実し、これからヘビーユースすることになりそうです。

[C++] 46 FLTK : findコマンド生成アプリ/ Fl_Choice

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

Fl_Choiceを使ってプルダウンメニューを作成しました。

ネットにあるFl_Choiceのコード例は小難しいばかりで要領を得ませんでしたが、自分で意味を考えながら書くと内容が単純だからかシンプルな表現になりました。

外観をスッキリさせたいのでボタンへのpngファイルの埋め込みは見送りました。あとはgrep機能を追加して完成にするつもりです。

<関連部分のみ抜粋>
Fl_Menu_Item pulldown[] = {
  {"and"},
  {"or"},
  {"not"}
};

if (onoff_free == 1){
   string choices[3] = {"-and","-or","-not"};
   int choice_num = choice->value();
   string choice_str = choices[choice_num];

   cmd << choice_str << " " ;
   std::cout << cmd.str() << endl;

   const char* free_char = free_input->value();
   string free_str = string(free_char);

   cmd << free_str << " " ;
   std::cout << cmd.str() << endl;
}

<main関数内> 変数freeは既に存在するのでfree2とした
// Free
// free_rbtn
free_rbtn = new Fl_Round_Button(40,115,20,20,nullptr);
// free_label
free2 = new Fl_Box(58,120,26,12,"Free");
free2->labelcolor(fl_rgb_color(234,237,247));
free2->align(Fl_Align(FL_ALIGN_INSIDE|FL_ALIGN_LEFT));
// free_choice
choice = new Fl_Choice(95, 115, 50, 20,nullptr);
choice->menu(pulldown);

[C++] 45 FLTK : findコマンド生成アプリ/機能追加

もう少し完成度を高めるべくGUIをデザインしてみました。

検索条件(自由記述)、各項目クリアボタンの追加です。検索条件の”and/or/not”をプルダウンメニューで選択できるようにし、ゴミ箱のpngファイルをボタンに組み込みます。いずれもFLTKで実装するのは初めてです。

骨組みができてからのこういった作業がプレッシャーもなくのんびり進められるので一番楽しい時間かもしれません。

[C++] 44 FLTK : findコマンド生成アプリ/sudo追加

[M1 Mac, Big Sur 11.6.5, FLTK 1.3.8]

検索時にアクセス拒否されたディレクトリ内も検索したい時のためにsudoをコマンドに追加できるようにしました。なんてことはない内容なのでコードは省略します。

GUIへの標準出力表示実装は難航していますが、コンソール版(GUIとのハイブリッド)で事足りるためこれで基本機能は実装完了になりそうです。

[C++] 43 ld: duplicate symbols for architecture arm64への対処

ケースバイケースですが、今回はヘッダファイルの変数にstatic修飾子を付けるとシンボルの重複が解消されて直りました。

#ifndef STDDISPLAY_H
#define STDDISPLAY_H

#include <FL/Fl_Text_Display.H>

static Fl_Text_Display *G_disp[3];
static Fl_Text_Buffer *G_buff[3];
static int G_outfd[3];
static pid_t G_pids[3];  

void start_child(int);
void data_ready(int, void*);
void close_cb(Fl_Widget*, void*);

#endif