質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

解決済

2回答

2192閲覧

MacOSアプリの開いたファイル名の取得方法について

yoshizaka

総合スコア18

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

MacOS(OSX)

MacOSとは、Appleの開発していたGUI(グラフィカルユーザーインターフェース)を採用したオペレーションシステム(OS)です。Macintoshと共に、市場に出てGUIの普及に大きく貢献しました。

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2016/06/26 14:52

編集2016/06/27 12:38

###前提・実現したいこと
MacOSアプリの開発を行っており、ファイルをダブルクリックや右クリックから
開くを行った時に、そのファイルの内容を開きたいと考えております。

###発生している問題
開いたファイル名や階層の取得方法がわからず困っております。
Windowsでは今までmain関数の引数から取得して行っていたのですが、
MacOSではmain関数から引数でファイル名を取得することに失敗しております。
MacOSではどのような仕組みになっているのか、なぜ失敗しているのかご教授いただけないでしょうか?
よろしくお願い申し上げます。

###補足情報(言語/FW/ツール等のバージョンなど)
OSⅩ yosemite Xcode6 C++ JuceC++

###追加情報
コマンドラインツールでは無いためBJCRobot様のコメント拝見後に確認してみましたが、
どうやら私のソース記述部分はC++になっており、ライブラリ(JuceC++というライブラリ)の一部に下記のようなソースがございましたので、内部的にObjective-Cになっている可能性があるようです。

[[NSDocumentController sharedDocumentController]
noteNewRecentDocumentURL: [NSURL fileURLWithPath: juceStringToNS (file.getFullPathName())]];

他にもNSString、NSUIntegerという変数が検索にかかりました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr_Roboto

2016/06/26 23:20

ちょっと調べてみて確認なんですが、言語はC++なのですか? プロジェクト作ってみるとC++ではコマンドラインツールしか作れないようで、 それで作ると普通にmain関数がありますが? Objective-C、またはSwiftならまた回答が変わってくると思いますよ?
yoshizaka

2016/06/27 10:22

BJCRobot様ご指摘ありがとうございます。追加情報の欄に追記させていただきました。
guest

回答2

0

BJCRobot様ご協力下さり誠にありがとうございました。
おかげさまで検索するキーワードの幅が広がり何とか行き着くことができました。

処理の奥深くまで追えなかったため推測となってしまいますが、どうやら通知センターというシステムを用い、開いたアプリケーション名を随時取得するシステムをコーティングしているようです。Windowsの場合アプリケーションは多重起動されるようですが、Macの場合アプリケーションは多重起動ではなく複数ウィンドウで行うみたいなので、その影響でコマンドラインではないファイルの開き方になっているのではないかと思っております。NSDocumentControllerというクラスを用いているかもと考えましたが、ライブラリ内部に該当処理が見当たらなかったため通知センターだと判断しました。

下記サイトを参考にさせていただきました。
http://d.hatena.ne.jp/zariganitosh/20120918/notification_driven_applescript

蛇足ですが、私が利用しているライブラリの場合は「JUCEApplication::anotherInstanceStarted」という関数を使うと手軽にファイル名が取得できるようになっておりました。

投稿2016/07/06 15:10

yoshizaka

総合スコア18

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Mr_Roboto

2016/07/06 15:15

あ、調べようと思ってすっかり忘れていました、すいません、 ^_^; 無事に解決したのですね、良かったです。 そんな気を使って頂かなくても私の回答はまったく役にたたなかったことはわかりますw 最近は、。iPhoneばっかり流行っててMacアプリ開発の情報は少ないですもんねえ いずれにしても、この記事が残ることで後の開発者のために役に立つことでしょうね ^^ 私もまた精進します。
guest

0

ベストアンサー

質問の追記ありがとうございます。興味があったので調べてみました。
Objective-Cで作ると Supporting Files/main.m というところにmain関数があるようです。

ちょっと(かなり)古い情報ですが、以下のページを見ながらやってみました。
Xcode 4でコマンドライン オプションを設定/取得する

イメージ説明

現在の環境は、XCode7.3.1ですが、同じ方法で取れるようです。
上記ページの場合は、 -i のオプションで取得する例なので、ちょっとまた工夫が必要かも知れませんが、
とりあえず取れますよということでいかがでしょうか。

投稿2016/06/27 11:15

編集2016/06/27 11:18
Mr_Roboto

総合スコア2208

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yoshizaka

2016/06/27 12:42

申し訳ございません言葉が不足しておりました。現状の課題として、ファイルをダブルクリックしてから該当ファイルを開こうとした場合に、main関数の引数から開いたファイル名を取得することができずにおります。上記の記事も大変勉強になりましたが、問題解決に至ることはできませんでした。MacもWindows同様、ファイルから開くを行った場合は本来ならばmainの引数からファイル名が取得できるのでしょうか?
Mr_Roboto

2016/06/27 12:59

普通は、引数に開くファイル名が入ると思いますが? そうじゃないのかな? 関連付けはしてありますか? 例えば、ターミナルで $ open /Applications/Preview.app ~/Pictures/wallpaper.png とかやると開けますけど、こういうことではないのかな ファインダーがそれをやってるものだと思ってたけど、 思い違いなのか、、、うーん、時間あればもうちょっと調べてみます。 私も勉強になりますし^^
yoshizaka

2016/06/28 15:38

大変恐縮ですがよろしくお願い致します。こちらでも引き続き調査を行います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問