コマンドラインからコマンドラインツールを完全にインストールするにはどうすればよいですか?


44

Xcodeコマンドラインツールのインストールのスクリプトを作成したいと思います。

マーベリックスでは、

xcode-select --install

ユーザーにインストールを促すダイアログが開きますが、softwareupdateコマンドを使用するなど、ダイアログなしでインストールをトリガーしたいと思います。

これを行う方法はありますか?

編集:

具体的にxcode-select --installは、ユーザーがツールを手動でダウンロードしたりApple Developerアカウントを持っている必要なく、ツールをダウンロードしてインストールするアプリケーションを起動します。これ/System/Library/CoreServices/Install Command Line Developer Tools.appを行うために使用するようです。

Appleと同じメカニズムを使用しますが、GUIは使用しません。これは壊れやすいと思われるため、ツールを含む.dmgを手動でダウンロードする必要はありません。Appleは、Appleから直接ソフトウェアをダウンロードまたはインストールするsoftwareupdateなど、他のいくつかのコマンドラインツールを提供しinstallています。


1
これを内部スクリプトまたはある種の配布用にしようとしていますか?私が尋ねる理由は、開発者ツールにアクセスして、それ以外の場所に配布するために(無料の)開発者アカウントが必要なので、Appleのライセンス契約に違反するからです。
コリンC.13年

1
@ColinC。xcode-select --installはApple Developerアカウントを必要としません。ツールを使用する前にライセンス契約に同意する必要がありますが、アカウントなしでダウンロードします。
また、

回答:


30

私はこの1つの信用を主張することができますが、私はそれがhttps://github.com/chcokr/osx-init/blob/master/install.shに埋もれていることがわかりました

これは、UIにログインせずに私の10.10ヘッドレスVMで機能しました。少なくとも10.9-10.14との互換性のために適用される更新

touch /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress;
PROD=$(softwareupdate -l |
  grep "\*.*Command Line" |
  head -n 1 | awk -F"*" '{print $2}' |
  sed -e 's/^ *//' |
  tr -d '\n')
softwareupdate -i "$PROD" --verbose
rm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress

これは、結果が1つしかないことを前提としています softwareupdate -l | grep "\*.*Command Line"-これが複数のバージョンを返す場合、より具体的なロジックが必要になる場合があります。(私は再現ケースを持っていません)

10.10-10.14で機能するように見える1つのバリエーション(限定的なテスト)(10.9はcliツール名にosxバージョン番号を返さないため、そこでは機能しません):

PROD=$(softwareupdate -l |
 grep "\*.*Command Line.*$(sw_vers -productVersion|awk -F. '{print $1"."$2}')" |
 head -n 1 | awk -F"*" '{print $2}' |
 sed -e 's/^ *//' |
 tr -d '\n')

いくつかの結果の例:

* Command Line Tools (OS X Mavericks)-6.2
* Command Line Tools (OS X 10.10) for Xcode-7.2
* Command Line Tools (macOS El Capitan version 10.11) for Xcode-8.2
* Command Line Tools (macOS High Sierra version 10.13) for Xcode-10.1
* Command Line Tools (macOS Mojave version 10.14) for Xcode-10.1

1
このスクリプトは、コードの元のソースのように見えると10.9の下のバージョンのMac OS X上で動作する追加のコードを持っていますgithub.com/timsutton/osx-vm-templates/blob/...
フィン

1
悲しいことに、それは本当の驚きよう.....、すべての新しいリリースを破損するもののこのタイプのためにかなり典型的だ
熱心

3
10.12(Sierra)では、ここで変更しなければならなかったのは、「
v

3
素晴らしい答え、私にとってはシエラでうまくいきます!:-)ただし、をrm /tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress実行した後softwareupdate -i ... 、それ以外の場合は利用可能な更新としてsoftwareupdate -l表示する後続の呼び出しが必要になる場合Command Line Tools ... があります。この(想定される)更新はApp Storeには表示されないようです。おそらくsoftwareupdate -l、アプリケーションの更新ではなく、「システム」の更新のみがリストされるためです。
ssc

1
@thaimin複数の結果を返す再現ケースはありませんが、修正が可能なアップデートを投稿しました。課題のひとつというリンゴがそうでソートやフィルタのスーパー一貫した何が本当にありません、彼らは長年にわたってこれらの名前を付ける方法と非常に矛盾しています...
キーン

18
  1. Apple DeveloperサイトからCommand Line Toolsパッケージをダウンロードします

  2. ダウンロードした1 DMGをマウントします。

    hdiutil attach "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"
  3. コマンドラインからインストーラーを実行します:

    cd "/Volumes/Command Line Tools (Mountain Lion)"
    installer -verbose -pkg "Command Line Tools (Mountain Lion).mkpg" -target /
  4. 終了したら、DMGをアンマウントし、ダウンロードを削除します。

    1. DMG 2を取り出します。

      cd /
      hdiutil detach /dev/disk3s2
    2. DMGを削除します。

      rm "command_line_tools_os_x_mountain_lion_for_xcode__october_2013.dmg"

1執筆時点では、ダウンロードされたDMGおよびパッケージ名は正確ですが、将来的には名前が変更される可能性があります。コマンドを変更する(またはタブ補完を使用する)ことを忘れずに、コマンドの関連部分を入力してください。
2コマンドが機能しない場合は、ディスクがマウントの名前と一致することを確認します(mount)。


1
これが将来の証拠になるようにしたいので、ツールディスクイメージの独自のコピーを提供する必要はありません。xcode-select --installは、ユーザー用のツールをダウンロードしてインストールします。ADCは必要ありません。私はまさにこれをしたいのですが、GUIなしで。
また、

ハードウェアIOツールのインストールに非常に役立つポイント1と2が見つかりました。
rstackhouse

6

別の方法は、私が書いたこのapplescriptを使用することです。

https://gist.github.com/brysgo/9007731

do shell script "xcode-select --install"
do shell script "sleep 1"

tell application "System Events"
    tell process "Install Command Line Developer Tools"
        keystroke return
        click button "Agree" of window "License Agreement"
    end tell
end tell

xcode-select --install
sleep 1
osascript <<EOD
  tell application "System Events"
    tell process "Install Command Line Developer Tools"
      keystroke return
      click button "Agree" of window "License Agreement"
    end tell
  end tell
EOD

1
macos 10.11「支援アクセスではosascriptは許可されていません」というエラーが表示される
-ClintM

6

受け入れられた回答のスタイルとロジックをクリーンアップし、可能な限りバージョンに依存せsoftwareupdateず、最大限の能力を発揮し、再利用可能なos変数を導入する試み:

#!/bin/bash
# Requires root
os=$(sw_vers -productVersion | awk -F. '{print $1 "." $2}')
if softwareupdate --history | grep --silent "Command Line Tools.*${os}"; then
    echo 'Command-line tools already installed.' 
else
    echo 'Installing Command-line tools...'
    in_progress=/tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress
    touch ${in_progress}
    product=$(softwareupdate --list | awk "/\* Command Line.*${os}/ { sub(/^   \* /, \"\"); print }")
    softwareupdate --verbose --install "${product}" || echo 'Installation failed.' 1>&2 && rm ${in_progress} && exit 1
    rm ${in_progress}
    echo 'Installation succeeded.'
fi

注意:sw_versフィルターは10.10以前のさまざまなリリースでは機能しません。(私は唯一の10.9 10.10と10.14に今日テストし、10.11から10.13に話すことができない)(いくつかの例のための私の更新の答えを参照してください)
熱心

2

これは私が使用するもので、一部はbrysgoの答えに基づいています。

sudo sqlite3 /Library/Application\ Support/com.apple.TCC/TCC.db \
    "INSERT or REPLACE INTO access(service,client,client_type,allowed,prompt_count) VALUES('kTCCServiceAccessibility','com.apple.Terminal',0,1,1);"

if [[ "$(xcode-select -p)" == "" ]]; then
  printf "\n### Installing Xcode command line tools\n"
  xcode-select --install
  sleep 2
  osascript <<EOD
    tell application "System Events"
      tell process "Install Command Line Developer Tools"
        click button "Install" of window ""
        click button "Agree" of window "License Agreement"
        repeat until exists button "Done" of window ""
          delay 1
        end repeat
        click button "Done" of window ""
      end tell
    end tell
EOD
fi

更新:Appleはアクセスデータベースに新しい列を追加し続けます。最初の5の値を指定するだけで、コードを更新してこれを反映します。


1

これらの回答には、さらにいくつかの選択肢があります。

XCodeコマンドラインツールをダウンロードする

XCode 4.x CLToolsパッケージは、公式のダウンロードサイトから直接リンクを介してダウンロードできます。

インストールプロセスを自動化するスクリプト次に示します1

ツールの更新されたリンクを見つけるには、次のコマンドを使用できます。

curl -Ls https://devimages.apple.com.edgekey.net/downloads/xcode/simulators/index-3905972D-B609-49CE-8D06-51ADC78E07BC.dvtdownloadableindex | plutil -convert json -o - - | python -mjson.tool | less

[1]サーバーを乱用/過負荷にしないでください

最初にApple Developer Download Siteにログインし、そこで利用可能な最新のCommand Line Toolsをダウンロードする方が簡単な場合があります。その後.dmg、独自のパッケージリポジトリサーバーでをホストし、developer.apple.comにログイン.dmghdiutilなくても、多くのマシンに確実にインストールできます。

2015年6月10日現在、最新のコマンドラインツールへのリンクdmgは次のとおりです。

http://adcdownload.apple.com/Developer_Tools/Command_Line_Tools_OS_X_10.10_for_Xcode_6.3.2/commandlinetoolsosx10.10forxcode6.3.2.dmg


このリンクは質問に回答するかもしれませんが、回答の重要な部分をここに含め、参照用のリンクを提供する方が良いでしょう。リンクされたページが変更されると、リンクのみの回答が無効になる可能性があります。
GRG

1
@grgarside:このスクリプトを最新のYosemite / XCode 6.3.2 CLT dmgで更新し、回答の重要な部分をこの回答にローカルにコピーするのに時間がかかりました。
TrinitronX

@grgarside:リンクの問題に気づきました。スクリプトはおそらく古くなっていましたが、最初に投稿した同じ日にスクリプトを更新する時間がありませんでした。これらのリンクを開始するのに良い場所として、また戻って再度更新してテストするための自己へのメモとして提供したかっただけです。
TrinitronX

1

Home Brewをインストールすると、コマンドラインツールが自動的にインストールされることがわかりました。

私はこの気まぐれなイメージを使用してこれをテストしました。

次のコマンドを実行してHomebrewをインストールし、その際にコマンドラインツールをインストールします。

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
  • 元の質問はコマンドラインツールのインストール方法のみを尋ねていましたが、最近はHome BrewがインストールされていないMacも知りません。

あなたが見ればgithub.com/Homebrew/install/blob/...あなたはHomewbrewは、(例えばのための回答に記載されたものと同様のtechinque使用されて表示されますapple.stackexchange.com/a/195963/66169この質問に)
アノンを
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.