Mac」タグアーカイブ

Swift…

筆者は macOS に Command Line Tools を入れているんだし。
せっかくなので Swift もちょっぴりやっておこうかなって。

調べてみると CLang ではなく swiftc コマンドを使うようだ。
ソースの拡張子は swift とそのまんまにする。
gcc や CLang 同様に -o オプションで名前を付けられる。
Foundation の println を使わず print で stdout に出力可能。

// swiftc -o hoge src.swift
print("TEST")

うん、Xcode が無くてもビルドできるね。
さて Foundation を使ってみよう。

import Foundation
println("TEST")
exit(0)

というネットで見つけた最小限コードに書き換えてみたけど。
ビルドできない、いくら探してもオプション無しでビルドできると出るのに。
Objective-c と同じ -framework オプションを指定しても結果は同じ。

swiftc

手段はあると思うけど見つからない、別のビルドを試そう。
公式をよく見るとパッケージの作り方が書いてあった。

Swift.org – Getting Started

swift package init
swift build

xctest

xctest が無いんだって、xc*** ってつまり Xcode のツールだよね。
もしかして Xcode を入れたら上の swiftc コマンドも上手くいくのかも。
Swift って完全に Xcode とセットなのか???

もう嫌だ、言語を試す前になんでこんなに苦労しなきゃいけないんだよ!
Xcode を入れたって今度は Xcode の使い方に苦労するだけジャン。
Swift ヤメ、やっぱり Swift はスズキだけでいいよ。

Objective-c は言語もビルド方法も簡単だったのにな。
それより昔書いた C や JXA のコードがサンドボックスに引っかかるのをなんとかしてくれよ、SELinux みたくできないのか?
プログラミングするなら mac、という時代はもう終わっている。

macOS Command Line Tools

今回は Mac ネタ。
macOS にコンパイラを入れたいけど Catarina の Xcode は 8.1GB もある。
ちょっと C を使うだけにこんな巨大なモンを入れるなんてイヤだ!
と思っていたけどコマンドラインツールというものがあるらしい。

日本語ブログにはロクな情報が無いので下記を見て。
How to Install Command Line Tools in Mac OS X (Without Xcode)

個別には選択できないのね、てかヘッダやライブラリ類の情報が無いけど。
筆者はぶっちゃけ CLang と標準ヘッダと Cocoa SDK だけでいいんだけど。
C 等の標準ヘッダは当然入ると思うけど何故かどこにも情報が無い。

インストールサイズも Xcode からいくつ減ったみたいなのしか出てこない。
よし疑問点は自分で導入して調べてみよう、まず現状 SSD 状況の確認。

i001

異様に少ないかも、ほぼスクリプトというかテキストファイルばかりだもん。
筆者は大量なデジイチ画像や動画は全部 Fedora メインマシンに入れているので。
とっととリンク先コマンドでインストールしたら。

i002

19.22 – 18.28 = 0.94
約 1 GB ってことね、Linux を知っているとコレでもデカい。

open /Library/Developer/CommandLineTools/

とコマンドを打って何がインストールされたか調べる。

i003

Cocoa どころか Metal, WebKit 等のヘッダは上記に普通にあったわ。
てか SDK 丸ごとかよ、そりゃこんなサイズになるってばさ。
標準ヘッダは usr/includes 以下にある、Linux の /usr/includes と同じ。
C/C++ ヘッダは共通位置に、拡張子の無いものが C++ 用なので共存している。

ところで解っていると思うけど、新たにパスを通す必要は無い。
最初から /usr/bin にあるゾンビコマンドが該当コマンドを実行する。
Linux の pkg-config 相当は clang のオプションだけでまかなえる。

#include <stdio.h>

// clang -o c_out test.c

int main(void) {
    // C99 対応チェックをついでに
    for (int i=0; i<3; i++) {
        printf("%d\n", i);
    }
    return 0;
}

#import <Foundation/NSString.h>

// clang -o m_out test.m -framework Foundation

int main(void) {
    const char *cstr = "スズキ";
    NSString *nstr = @(cstr);
    NSLog(@"%@", nstr);
    return 0;
}

をやってみると普通にビルドできた。
clang は gcc と -o オプションが共通なのね。

xcode-select -h で見るとアンインストールオプションが無い。

sudo rm -r /Library/Developer/CommandLineTools

だけでいいと思う、削除しないけど。

open -a URI

macOS の open -a に渡すのは URI でも良かった。

Finder Script を以下に書き換えしても普通に動くね。
Tips ページを又しても書き換えしなきゃ。

#!/usr/bin/osascript

let app = Application.currentApplication();
app.includeStandardAdditions = true;

let uri = Application('Finder').finderWindows()[0].target().url();
//let path = decodeURI(uri).slice(7);
//app.doShellScript(`open -a Terminal "${path}"`);
app.doShellScript(`open -a Terminal "${uri}"`);

ところで筆者はメインマシンが Fedora なので URI と主に書く。
macOS メインの人は URL と同じ意味だと思えばいい。
URLとURIの違いとは? パーツの構造・名称・意味も大解説! | 初代編集長ブログ―安田英久 | Web担当者Forum

ただし macOS 標準アプリは全部対応しているけどアプリによるみたい。
筆者自作の comipoli も対応しなきゃいけないんだけど。

Fedora and macOS sftp 2

前回の macOS から Fedora への ssh の件。
Fedora の共有設定で「リモートログイン」をオンにするだけだった。

ssh で macOS から接続の初回は警告が出るけど yes を選べば以降は普通に接続。
Fedora の ssh ポート(22) は最初から開いているし SELinux にも邪魔されない。
ログアウトは control+D でいいのね。

後は sftp だけど、よく考えたら Finder でやる必要はなかった。
普通にアプリを探せばいいじゃん。
GNOME だと Nautilus が便利すぎてそういう選択肢を忘れてしまう。
本サイトの macOS Tips ページも実は全部 Nautilus でアップロードしている。

てかフリーソフトをインストールしまくるなんて初心者しかやらないし。
homebrew とかいったい何故そんなのを使いたい人がいるのかも理解できない。
Xcode すら入れていない筆者がこんな Blog をヤレるのに。
脱線しそうなのでこのくらいにして。

多分アップデート以外で App Store を開くのは数年ぶり。
sftp で検索。
Transmit というのが定番と出るけど調べると年額 2800 円って、高いよ!
ForkLift というアプリが 8.5MB だし無料のようなので試してみる。
初回起動でメールアドレス入力が出るけど no, thanks! を選択でいいみたい。

普通に接続できた、DnD で問題なく双方向コピーできる。
思いっきり英語メニューだけど普通に使うぶんには問題ないかな。

でもサーバー側は日本語がバケる、コピーはバケたまま可能だけど。
W クリックでファイルを開くことも、ただし command+O は使えない。
Favorites に command+D で登録できない、てかどうやって登録するんだ?
サードパーティとはいえもっと統一感がほしい、って GNOME 使いは思う。

ところで macOS にも sftp コマンドが最初から入っているんだね。
ラッピングしてアプリを自作するのもアリかも。

Fedora and macOS sftp

macOS Catarina になって私的に一番困ったのが Fedora との接続です。
afp が使えなくなったので samba を使ってファイルのやりとりをしているのだけど。
Catarina にアップグレードした直後から唖然とするほど遅くなった。

初期化だけなら別にかまわないんだけど、すべてが遅い。
ディレクトリ移動毎にしょんぼりするほど待たされるってどうなのよ。

他の手段で Fedora から macOS のファイルにアクセスというと。
やっぱり UNIX 系 OS の基本は SSH ですよね。

ssh ユーザー名@macのコンピューター名.local/

ssh

普通に接続できた、しかもディレクトリ移動もまるでローカルのように早い。
ログインして cat コマンドで表示される文字列を端末エミュレーターからコピペ。
で大半の作業はイケるはず、てか Catarina になってからそうやっていた。

でもこれじゃファイルの転送はできない、何より面倒。
やっぱりファイルマネージャを使った GUI でやりたいよね。
sftp という ssh を使ったプロトコルがあったよな。
ものは試しのつもりで Nautilus で Ctrl+L を叩いて以下を打ち込む。

sftp://macのコンピューター名.local/

sftp

できるジャン、しかも感動するくらい早い!
Nautilus をもう一つ立ち上げ普通に DnD でコピペできる。
Gedit や eog で普通にファイルを開くこともできる。

てか、samba はコピーするとパーミッションが 600 になって困っていた。
コッチならパーミッションは維持される、すばらしい。

何故誰もこの方法を教えてくれなかったんだ!
ってしかたがないか、大半の人は Linux から macOS に接続なんて考えないし。
どちらかが Windows だと samba になってしまうよね。

mac sftp

ちなみに Finder からは sftp はできませんでした。
ssh すら、Firewall ポートは空けて SELinux を無効にしても駄目だった。
まだ何かやる必要があるみたいだけど Nautilus で全部やればいいから別にいいか。
だって Finder って使い辛いんだもん。