LoginSignup
8
8

More than 5 years have passed since last update.

Carthageのcopy-frameworksでInput Filesに追加するframeworkの一覧を出力するスクリプトを書いてみた

Last updated at Posted at 2016-02-04

:package:概要

carthage updateを行ったあとに、Targetの[Build Phases]にRunScriptを作って、
以下のようにcommandとInput Filesにライブラリのframeworkのpathを指定するのですが、
スクリーンショット 2016-02-04 16.57.42.png

このInputFilesに入力するpathの一覧をターミナルで出力できるように、スクリプトを書いてみました。
特に手入力して頑張る場合、typoする可能性もあるので、正確なpathを吐き出してもらったほうが安心したりします。

:notebook_with_decorative_cover:コード

こんな感じで書いてみました。
体裁はこちらを参考にさせて頂きました。
Gistはこちらです。

carthage-framework-paths.sh
#!/bin/bash
usage() {
    cat <<HELP
SYNOPSIS:
  $0 [-d] [iOS(default)|watchOS|tvOS|Mac]
  $0 [-h]

ARGUMENTS:
  iOS       print paths for iOS (default)
  watchOS   print paths for iOS
  tvOS      print paths for iOS
  Mac       print paths for iOS

OPTIONS:
  -h  Show usage
  -d  output decorated result, e.g. "\$(SRCROOT)/Carthage/Build/iOS/APIKit.framework",

EXAMPLE:
  $0 iOS
  $0 -d watchOS

HELP
}

framework_not_found() {
  echo "framework not found."
}

print_paths() {
  dir_path="Carthage/Build/$1"
  if [ ! -d $dir_path ]; then
    framework_not_found; exit 0;
  fi
  if [ $DECORATE -eq 1 ]; then
    paths=$(find Carthage/Build/"$1" -type d -name "*.framework" | xargs -n 1 -I % echo '"$(SRCROOT)/'%'",')
  else
    paths=$(find Carthage/Build/"$1" -type d -name "*.framework" | xargs -n 1 -I % echo '$(SRCROOT)/'%)
  fi
  [ ! -z "$paths" ] && echo "$paths" || framework_not_found
}

main() {
  SCRIPT_DIR="$(cd $(dirname "$0"); pwd)"
  DECORATE=0
  for ARG; do
    case "$ARG" in
      -*)
      while getopts h,d OPT "$ARG"; do
        case "$OPT" in
          h) usage; exit 0;;
          d) DECORATE=1;;
          *) exit 1;;
        esac
      done
      ;;
    esac
  done

  shift $(expr $OPTIND - 1)
  if [ $# -gt 1 ]; then
    echo -e "Too many arguments. See below:\n"; usage; exit 1;
  fi
  if [ ! -d Carthage/Build ]; then
    echo "directory \"Carthage/Build\"  not found"; exit 1;
  fi
  print_paths ${1:-iOS}
}

main "$@"

:coffee:使い方

事前にcarthage update等でCarthage/Build以下にframeworkが生成されている状態にします。
あとは、上記shファイルをプロジェクトのルートディレクトリに配置して実行するだけです。

デフォルトで "Carthage/Build/iOS" 中のframeworkのpathを出力しますが、
引数で "iOS, watchOS, tvOS, Mac" を指定すれば、それぞれのプラットフォームに対応したframeworkのpathの一覧を出力します。
あとはこれをInput Filesに追加していけばオッケーです:smiley:

:pencil2:出力してみる

output
$ ./carthage-input-files.sh
# 出力結果
$(SRCROOT)/Carthage/Build/iOS/APIKit.framework
$(SRCROOT)/Carthage/Build/iOS/Bond.framework
$(SRCROOT)/Carthage/Build/iOS/FirstAppearing.framework
$(SRCROOT)/Carthage/Build/iOS/Himotoki.framework
$(SRCROOT)/Carthage/Build/iOS/Result.framework

$ ./carthage-input-files.sh watchOS
# 出力結果
$(SRCROOT)/Carthage/Build/watchOS/APIKit.framework
$(SRCROOT)/Carthage/Build/watchOS/Result.framework

8
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
8