Soumettre la recherche
Mettre en ligne
Cocoaアプリに無理矢理プラグインを導入する入門
•
2 j'aime
•
2,202 vues
京大 マイコンクラブ
Suivre
既存のアプリが微妙に使いにくい?そんなときは!自作のプラグインで改造できるニャー
Lire moins
Lire la suite
Technologie
Signaler
Partager
Signaler
Partager
1 sur 95
Télécharger maintenant
Télécharger pour lire hors ligne
Recommandé
This slide presentation will show you the basic difference betwwen Carbon and cocoa.
Carbon vs cocoa
Carbon vs cocoa
malvikushal
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouch
Shin Ise
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフト
atmarkit
Tech-in MeetUp #02 の LT登壇時の資料です。(8分/29ページ) 完全にブログの宣伝資料になっちゃいましたが悔いはありません。
スマホの写真+動画のバックアップ作業を完全自動化して撲滅したった件
スマホの写真+動画のバックアップ作業を完全自動化して撲滅したった件
Mamoru Ohashi
watanabe wants to make community with LOD of activity
Watanabe civictechforum
Watanabe civictechforum
siramatu-lab
SIer iotlt vol5 @SAP 発表資料
スマホでディープラーニング
スマホでディープラーニング
takuji fukumoto
テレニコツイ
テレニコツイ
jz5 MATSUE
WebTouchMeeting第41回の発表資料です。 発表時は本名プレイでしたが、修正しました。 また、容量の関係で動画を削っています。 資料内部の人数の数字は、発表時に集計を取ったものです。
Androidが変えたもの
Androidが変えたもの
Yuki Yamakido
Recommandé
This slide presentation will show you the basic difference betwwen Carbon and cocoa.
Carbon vs cocoa
Carbon vs cocoa
malvikushal
C#でiPhoneアプリ開発 with MonoTouch
C#でiPhoneアプリ開発 with MonoTouch
Shin Ise
おばかアプリ勉強会資料 マイクロソフト
おばかアプリ勉強会資料 マイクロソフト
atmarkit
Tech-in MeetUp #02 の LT登壇時の資料です。(8分/29ページ) 完全にブログの宣伝資料になっちゃいましたが悔いはありません。
スマホの写真+動画のバックアップ作業を完全自動化して撲滅したった件
スマホの写真+動画のバックアップ作業を完全自動化して撲滅したった件
Mamoru Ohashi
watanabe wants to make community with LOD of activity
Watanabe civictechforum
Watanabe civictechforum
siramatu-lab
SIer iotlt vol5 @SAP 発表資料
スマホでディープラーニング
スマホでディープラーニング
takuji fukumoto
テレニコツイ
テレニコツイ
jz5 MATSUE
WebTouchMeeting第41回の発表資料です。 発表時は本名プレイでしたが、修正しました。 また、容量の関係で動画を削っています。 資料内部の人数の数字は、発表時に集計を取ったものです。
Androidが変えたもの
Androidが変えたもの
Yuki Yamakido
Jenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
Django ORMはSQLの知識がなくてもある程度のデータベース操作ができる便利な技術ですが、その知識だけでDB操作をしていると、気がつかないうちにとても効率の悪い実装をしてしまいます。Web開発からプログラミングを始めた人はWebフレームワークを使ってしばらくしてからDBに関心を持つようになる、何ならDBのことはあまり考えたくない、という方も多いのではないでしょうか。このDjango ORM道場では、そんな「Django ORMあるある」を正し、本来やりたかったはずの処理を効率良く行うことができるよう、基本の形を紹介します。 デモコード https://github.com/shimizukawa/pycon-apac-2023-django-orm-dojo トーク情報 https://2023-apac.pycon.jp/timetable?id=GJJGPS
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Takayuki Shimizukawa
ひと目でわからん Metro アプリ開発入門
ひと目でわからん Metro アプリ開発入門
Masuda Tomoaki
OpenJDKのコミッタってどんなことしたらなったの? 解決してきた技術課題の事例から見えてくる必要な知識と技術 (JJUG CCC 2023 Spring) 2023年6月4日(日) NTT データ 技術開発本部 阪田 浩一
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
Developers Summit 2016 OpenJam & ComCamp Fukuoka での発表資料です。
DevOps、その前に
DevOps、その前に
Yuta Matsumura
Shibuya Swift #2 (2015年 12月15日) でLTした資料
プログラミング初心者の壁の越え方
プログラミング初心者の壁の越え方
Yuichi Kato
筑波大学 Linux User Group (つくらぐ) http://www.tsukuba-linux.org/
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
University of Tsukuba Linux User Group
ITエンジニアに易しいUI/UXデザイン
ITエンジニアに易しいUI/UXデザイン
Roy Kim
2012年12月6日の「ITエンジニアに易しい実践的UI/UXデザイン勉強会」の資料です。
Practical ux4publish
Practical ux4publish
ncdc_jp
For DevfestW Kyoto ブランクのある人、初めての人向けの「Android・初めからリリースまで」
Weekend Androidのススメ
Weekend Androidのススメ
Suzuki Junko
初心者向けMacユーザー勉強会
初心者向けMacユーザー勉強会
Takuma Morikawa
年末〜最近の近況報告とTapAppAwardsというコンテストに出したTasketeというWebアプリについて書いてます。
LT#6 Taskete
LT#6 Taskete
Shingo Inoue
コロナ禍におけるリモートワークでのコミュニケーションなどのチーム課題に対して、SlackアプリのColla(コラ)を利用して解消するためのノウハウやおすすめTipsなどをお伝えします。
コロナ時代を生き抜く(?) ひとつ上の Slack "コラ"ボレーション
コロナ時代を生き抜く(?) ひとつ上の Slack "コラ"ボレーション
Masayuki Uehara
11/18(土)に福岡で開催した「LogicFlow-ja Offline #1」の発表資料です。
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
典子 松本
20101127 Android Usability Seminar
20101127 Android Usability Seminar
Visso株式会社
TOPPERS provide Real Time Operating kernel such as ASP(standard), ATK(for Automotive), HRP(for Space), FMP(multi core), SSP(smallest set profile) kernel and other tools. Real Time kernel for Raspberry Pi are released, as FMP and SSP.
TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)
Kiyoshi Ogawa
2012/9/14に行われた、PhoneGapユーザー会@大阪での講演資料です
PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料
Monaca
2014/10/11(土) 大田区産業プラザPiOで行われた「PHPカンファレンス2014」のLT登壇の資料です。
Unityではじめるサンデープログラミングのススメ
Unityではじめるサンデープログラミングのススメ
Yasuyuki Kamata
about iOS and BLE
I os*ble簡単プロトタイピング
I os*ble簡単プロトタイピング
Takahiro Yamamoto
ElectronとJavaScriptを活用した、デスクトップアプリ開発の概要資料です。
Electron + java scriptによる デスクトップアプリの開発
Electron + java scriptによる デスクトップアプリの開発
sasaron 397
2021/10/28の例会講座で使用したスライド (以下リンク) のSS移植版です。(オリジナルの発表から内容を一部修正しています。) https://www.canva.com/design/DAEt-1WzsZI/h85bHwMPQ8oxerFP-S3EDQ/view?utm_content=DAEt-1WzsZI&utm_campaign=designshare&utm_medium=link&utm_source=sharebutton
テキストファイルを読む💪 第1回
テキストファイルを読む💪 第1回
京大 マイコンクラブ
2021/09/26のLT大会で使用したスライド (以下リンク) のSS移植版です。 https://www.canva.com/design/DAEqXneuzGc/bVRBpr16c9lhZ6niQ2PEzQ/view?utm_content=DAEqXneuzGc&utm_campaign=designshare&utm_medium=link&utm_source=sharebutton
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
京大 マイコンクラブ
Contenu connexe
Similaire à Cocoaアプリに無理矢理プラグインを導入する入門
Jenkinsを使おうよ
Jenkinsを使おうよ
Yohei Oda
Django ORMはSQLの知識がなくてもある程度のデータベース操作ができる便利な技術ですが、その知識だけでDB操作をしていると、気がつかないうちにとても効率の悪い実装をしてしまいます。Web開発からプログラミングを始めた人はWebフレームワークを使ってしばらくしてからDBに関心を持つようになる、何ならDBのことはあまり考えたくない、という方も多いのではないでしょうか。このDjango ORM道場では、そんな「Django ORMあるある」を正し、本来やりたかったはずの処理を効率良く行うことができるよう、基本の形を紹介します。 デモコード https://github.com/shimizukawa/pycon-apac-2023-django-orm-dojo トーク情報 https://2023-apac.pycon.jp/timetable?id=GJJGPS
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Takayuki Shimizukawa
ひと目でわからん Metro アプリ開発入門
ひと目でわからん Metro アプリ開発入門
Masuda Tomoaki
OpenJDKのコミッタってどんなことしたらなったの? 解決してきた技術課題の事例から見えてくる必要な知識と技術 (JJUG CCC 2023 Spring) 2023年6月4日(日) NTT データ 技術開発本部 阪田 浩一
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
NTT DATA Technology & Innovation
Developers Summit 2016 OpenJam & ComCamp Fukuoka での発表資料です。
DevOps、その前に
DevOps、その前に
Yuta Matsumura
Shibuya Swift #2 (2015年 12月15日) でLTした資料
プログラミング初心者の壁の越え方
プログラミング初心者の壁の越え方
Yuichi Kato
筑波大学 Linux User Group (つくらぐ) http://www.tsukuba-linux.org/
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
University of Tsukuba Linux User Group
ITエンジニアに易しいUI/UXデザイン
ITエンジニアに易しいUI/UXデザイン
Roy Kim
2012年12月6日の「ITエンジニアに易しい実践的UI/UXデザイン勉強会」の資料です。
Practical ux4publish
Practical ux4publish
ncdc_jp
For DevfestW Kyoto ブランクのある人、初めての人向けの「Android・初めからリリースまで」
Weekend Androidのススメ
Weekend Androidのススメ
Suzuki Junko
初心者向けMacユーザー勉強会
初心者向けMacユーザー勉強会
Takuma Morikawa
年末〜最近の近況報告とTapAppAwardsというコンテストに出したTasketeというWebアプリについて書いてます。
LT#6 Taskete
LT#6 Taskete
Shingo Inoue
コロナ禍におけるリモートワークでのコミュニケーションなどのチーム課題に対して、SlackアプリのColla(コラ)を利用して解消するためのノウハウやおすすめTipsなどをお伝えします。
コロナ時代を生き抜く(?) ひとつ上の Slack "コラ"ボレーション
コロナ時代を生き抜く(?) ひとつ上の Slack "コラ"ボレーション
Masayuki Uehara
11/18(土)に福岡で開催した「LogicFlow-ja Offline #1」の発表資料です。
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
典子 松本
20101127 Android Usability Seminar
20101127 Android Usability Seminar
Visso株式会社
TOPPERS provide Real Time Operating kernel such as ASP(standard), ATK(for Automotive), HRP(for Space), FMP(multi core), SSP(smallest set profile) kernel and other tools. Real Time kernel for Raspberry Pi are released, as FMP and SSP.
TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)
Kiyoshi Ogawa
2012/9/14に行われた、PhoneGapユーザー会@大阪での講演資料です
PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料
Monaca
2014/10/11(土) 大田区産業プラザPiOで行われた「PHPカンファレンス2014」のLT登壇の資料です。
Unityではじめるサンデープログラミングのススメ
Unityではじめるサンデープログラミングのススメ
Yasuyuki Kamata
about iOS and BLE
I os*ble簡単プロトタイピング
I os*ble簡単プロトタイピング
Takahiro Yamamoto
ElectronとJavaScriptを活用した、デスクトップアプリ開発の概要資料です。
Electron + java scriptによる デスクトップアプリの開発
Electron + java scriptによる デスクトップアプリの開発
sasaron 397
Similaire à Cocoaアプリに無理矢理プラグインを導入する入門
(20)
Jenkinsを使おうよ
Jenkinsを使おうよ
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
Django ORM道場:クエリの基本を押さえ,より良い形を身に付けよう
ひと目でわからん Metro アプリ開発入門
ひと目でわからん Metro アプリ開発入門
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
OpenJDKのコミッタってどんなことしたらなったの?解決してきた技術課題の事例から見えてくる必要な知識と技術(JJUG CCC 2023 Spring)
DevOps、その前に
DevOps、その前に
プログラミング初心者の壁の越え方
プログラミング初心者の壁の越え方
Debug Hacks - 第4回つくらぐ勉強会
Debug Hacks - 第4回つくらぐ勉強会
ITエンジニアに易しいUI/UXデザイン
ITエンジニアに易しいUI/UXデザイン
Practical ux4publish
Practical ux4publish
Weekend Androidのススメ
Weekend Androidのススメ
初心者向けMacユーザー勉強会
初心者向けMacユーザー勉強会
LT#6 Taskete
LT#6 Taskete
コロナ時代を生き抜く(?) ひとつ上の Slack "コラ"ボレーション
コロナ時代を生き抜く(?) ひとつ上の Slack "コラ"ボレーション
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
LogicFlow 実践編~LogicFlowでいろいろつくってみた ~
20101127 Android Usability Seminar
20101127 Android Usability Seminar
TOPPERS as an IoT OS(kernel)
TOPPERS as an IoT OS(kernel)
PhoneGapユーザー会@大阪 講演資料
PhoneGapユーザー会@大阪 講演資料
Unityではじめるサンデープログラミングのススメ
Unityではじめるサンデープログラミングのススメ
I os*ble簡単プロトタイピング
I os*ble簡単プロトタイピング
Electron + java scriptによる デスクトップアプリの開発
Electron + java scriptによる デスクトップアプリの開発
Plus de 京大 マイコンクラブ
2021/10/28の例会講座で使用したスライド (以下リンク) のSS移植版です。(オリジナルの発表から内容を一部修正しています。) https://www.canva.com/design/DAEt-1WzsZI/h85bHwMPQ8oxerFP-S3EDQ/view?utm_content=DAEt-1WzsZI&utm_campaign=designshare&utm_medium=link&utm_source=sharebutton
テキストファイルを読む💪 第1回
テキストファイルを読む💪 第1回
京大 マイコンクラブ
2021/09/26のLT大会で使用したスライド (以下リンク) のSS移植版です。 https://www.canva.com/design/DAEqXneuzGc/bVRBpr16c9lhZ6niQ2PEzQ/view?utm_content=DAEqXneuzGc&utm_campaign=designshare&utm_medium=link&utm_source=sharebutton
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
京大 マイコンクラブ
Common Lispの入門スライド。作成者はCoil
Common Lisp入門
Common Lisp入門
京大 マイコンクラブ
多倍長整数の乗算を高速に行うアルゴリズムを、カラツバ法から始めて、最終的に高速フーリエ変換を用いた乗算に至るまでを解説しました。
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
京大 マイコンクラブ
2018/10/18 KMC例会講座 型無しラムダ計算のインタプリタを実装してみる
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
京大 マイコンクラブ
Geometry with Unity
Geometry with Unity
Geometry with Unity
京大 マイコンクラブ
セミコロンを使わずにc++を書きたい
セミコロンレスc++
セミコロンレスc++
京大 マイコンクラブ
エンジニアは肩こりや腰痛など様々な体の不調を抱えがち。 ちょっとした工夫でそれらを根本から解消
エンジニアと健康
エンジニアと健康
京大 マイコンクラブ
音声の分析合成と機械学習を使ってボイスチェンジャーを作るスライドです
女の子になれなかった人のために
女の子になれなかった人のために
京大 マイコンクラブ
KMC春合宿で発表した、難解プログラミング言語で競技プログラミングに挑戦するLTです。
Pietで競プロしよう
Pietで競プロしよう
京大 マイコンクラブ
もし太陽のコアがCPUと同程度の熱密度を持っていたらどうなるか、雑に計算した結果を発表したLTのスライドです
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
京大 マイコンクラブ
Unity や MonoGame など、C# でゲームを作る環境が整ってきた昨今。メモリ?なにそれ美味しいの?という初学者が、難しいことを考えずにモノづくりができる一方で、メモリについて知らないとトラブルになることもあります。C#でゲームプログラムを書いたことがある、くらいの方を対象に、メモリとは何か、から、メモリリーク・ガベージコレクションの話、そしてガベージコレクションの回数を減らす実装方法について話します。
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
京大 マイコンクラブ
GPUを利用して汎用演算を行う技術であるGPGPUを用いて、プログラムを高速化する技法についてまとめました。高速化の具体例も適宜用いて解説しています。 CPU編はこちら https://www.slideshare.net/KMC_JP/ss-45855264
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
京大 マイコンクラブ
関西情報系学生団体交流会2017 Piet勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
京大 マイコンクラブ
2017-09-02 KMC関東例会 at Cybozu インフラの自動化の辛さと ssh について
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
京大 マイコンクラブ
KMCの新入生プロジェクト「DTM練習会2017」の第1.5回にて行った「伴奏の付け方」に関する講座のスライドです。
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
京大 マイコンクラブ
テストプレイを観察するための心得などを紹介します。 KMC春合宿2017で使用したものに加筆修正を加えたもの。
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
京大 マイコンクラブ
KMC春合宿2017で使ったスライドです 「暗号技術入門 第3版 秘密の国のアリス 著:結城 浩」 をまとめたものです
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
京大 マイコンクラブ
ゲームエンジンをお探しのあなたに
Altseed
Altseed
京大 マイコンクラブ
KMC’の新入生プロジェクトの一つ「C#でゲームを作る2016」で使ったスライドです。
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
京大 マイコンクラブ
Plus de 京大 マイコンクラブ
(20)
テキストファイルを読む💪 第1回
テキストファイルを読む💪 第1回
かわいくなろうとしたら語彙力が下がった話
かわいくなろうとしたら語彙力が下がった話
Common Lisp入門
Common Lisp入門
多倍長整数の乗算と高速フーリエ変換
多倍長整数の乗算と高速フーリエ変換
つくってあそぼ ラムダ計算インタプリタ
つくってあそぼ ラムダ計算インタプリタ
Geometry with Unity
Geometry with Unity
セミコロンレスc++
セミコロンレスc++
エンジニアと健康
エンジニアと健康
女の子になれなかった人のために
女の子になれなかった人のために
Pietで競プロしよう
Pietで競プロしよう
もし太陽のコアがIntelCoreだったら
もし太陽のコアがIntelCoreだったら
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
C# ゲームプログラミングはホントにメモリのことに無頓着でいいの?
プログラムを高速化する話Ⅱ 〜GPGPU編〜
プログラムを高速化する話Ⅱ 〜GPGPU編〜
ドット絵でプログラミング!難解言語『Piet』勉強会
ドット絵でプログラミング!難解言語『Piet』勉強会
No SSH (@nojima; KMC関東例会)
No SSH (@nojima; KMC関東例会)
DTM練習会2017第1.5回 「伴奏の付け方」
DTM練習会2017第1.5回 「伴奏の付け方」
hideya流 テストプレイ観察術
hideya流 テストプレイ観察術
暗号技術入門 秘密の国のアリス 総集編
暗号技術入門 秘密の国のアリス 総集編
Altseed
Altseed
C#でゲームを作る2016 第8回
C#でゲームを作る2016 第8回
Cocoaアプリに無理矢理プラグインを導入する入門
1.
Super Simple Cocoa Plugin
Introduction nendoki
2.
コレって誰よ 上田 宗一郎(うえだ ソウイチロウ) id:
nendoki (a.k.a ne[tab]) 京都大学大学院情報学研究科M1 親の代からMac使い
3.
mac? スタバドヤ顔マン御用達アイテムNo1 パロアルト研究所からアイディア持ち出したアレ ディスプレイ上のサイズ=印刷サイズで有名
4.
本日話す事 コレがしたい 前提のお話 今回必要となる技術 実際にアプリを見てみよう
5.
本日話す事 コレがしたい 前提のお話 今回必要となる技術 実際にアプリを見てみよう
6.
Macアプリ作ってますか?
7.
Q. 今使っているプログラム が*微妙に*機能不足だ
8.
Windows的解法 フリーウェアに 良いのがあるよ!!
9.
富豪的解法 金を払えば良い
10.
プログラマ的解法 自分で作る
11.
FSF的解法 GPLコード片が 埋め込まれていないか探す
12.
13.
よりよい解法 既存のアプリを修正しよう
14.
という事で Mac用Cocoaアプリケーションに自分で機能を追加 して幸せを得よう
15.
本日話す事 コレがしたい 前提のお話 今回必要となる技術 実際にアプリを見てみよう
16.
前提のお話 Objective-Cってなんそ ObjC流記法 Cocoa Framework
17.
前提のお話 Objective-Cってなんそ ObjC流記法 Cocoa Framework
18.
Objective-C! || C + SmallTalk
19.
SmallTalkな箇所のみ解説します
20.
メッセージ呼び出し メンバメソッドの呼び出しの事 メッセージ 単項メッセージ キーワード付きメッセージ 二項メッセージ(SmallTalkのみ 可変長引数や部分的にキーワードの無いメッセージは省略
21.
単項メッセージ [obj message]; 他言語のobj.message()に対応 キーワード付きメッセージ [obj message:arg0
key1: arg1 key2:arg2 ..]; 他言語ではobj.message(arg0, arg1, arg2…)とか obj.message(arg0, key1=arg1, key2=arg2, …)に対応
22.
クラスの定義(ObjC固有) @interfaceでインターフェース定義(ヘッダー) @imprementsで実装を定義(ボディー) インスタンスメソッド - (型)methodName:(型)arg0 key1:(型)arg1; クラスメソッド +
(型)methodName:(型)arg0 key1:(型)arg1;
23.
@interface AGSampleLayer :
CALayer { CALayer *floorLayer; } + (id)layer - (void)resizeWithSize:(CGSize)size; @end ! @implementation AGSampleLayer + (id)layer { … return self; } ! - (void)resizeWithSize:(CGSize)size { … } @end
24.
カテゴリ クラス定義を複数回に分けて記述 既存のクラスに動的にメソッド追加が可能 フレームワークのクラスにも可能 実装を機能別に別のヘッダーに…なんてことも
25.
オーバーロードについて オーバーロードは存在しない メッセージ名を変える事で区別 メッセージ名にはキーワードを含める -(id)initWithFrame:(NSRect)frame style:(ViewStyle)style 識別子:-initWithFrame:style:
26.
良くある例 -(id)init -(id)initWithData:(NSData *)data -(id)initWithData:(NSData *)data
withSize:(int)size それぞれ別の識別子のため問題無し 返り値の型を合わせるのはマナー
27.
id? 特殊な型id 全てのオブジェクト型から暗黙のキャスト可能 存在しないメッセージは無視される コンパイルエラーにはならない 要するに任意のメッセージを受ける事を主張した Object *と覚えておこう
28.
前提のお話 Objective-Cってなんそ ObjC流記法 Cocoa Framework
29.
クラス名について Objective-Cには名前空間が無い 元ネタのC言語には無いから仕方ないね そこで関数/クラス名に二文字程度の識別子を使う NSObject (NextStep Famework由来のため) CGRect
(CoreGraphicsの機能のため)
30.
インスタンス化 インスタンスを「作る」メッセージ +alloc インスタンスを「初期化する」メッセージ -init -initWithHoge:
31.
実際に使う場合 NSDate *date =
[[NSDate alloc] init]; 現在時刻で初期化 NSImage *img = [[NSImage alloc] initWithData:bin]; 指定したデータで画像オブジェクトを作成
32.
-initの書き方 親の-initを明示的に呼び出し、自身に代入 返り値も自分自身とする - (id)init { if(self =
[super init]) { // 初期化コードを記入 } return self; }
33.
インターフェースの実現 あるメソッドを実装している事を期待したい 1. @protocolを利用する 速度を気にしない限り使わない 2.NSObjectをカテゴリで拡張する ルートオブジェクトが既に実装済み = 子クラスの対応は任意
34.
getter/setter int hogeなメンバ変数を持つとする getter -(int)hoge setter -(void)setHoge:(int)newhoge ObjC2.0から@propertyによってこの2つは自動生成可能に
35.
前提のお話 Objective-Cってなんそ ObjC流記法 Cocoa Framework
36.
Cocoa Framework? Macアプリケーションの基本ライブラリ Cocoa Frameworkは複数のフレームワークの集合 Foundation
Framework Appkit Framework Coredata Framework
37.
標準ライブラリは? Foundation Frameworkが提供するもの NSObject NSArray NSString NSDictionary and so
on..
38.
言語の基本的な機能が集まっている NSObject? 全てのクラスのルートクラス 他のフレームワークも必ず依存している …事になっている
39.
AppKit? Appkit Framwork アプリケーションのビュー イベント処理 AppleScript ランループとかもここから
40.
本日話す事 コレがしたい 前提のお話 今回必要となる技術 実際にアプリを見てみよう
41.
本日使う技術 アプリに侵入しよう! アプリを理解しよう! アプリを乗っ取ろう! アプリを操作しよう!
42.
本日使う技術 アプリに侵入しよう! アプリを理解しよう! アプリを乗っ取ろう! アプリを操作しよう!
43.
で、どうやって侵入するの
44.
古い方法 IMのフリをする /Library/InputManagers Cocoaアプリは必ずこのフォルダにある実行 ファイルを無条件にロードしていた 今は駄目です
45.
SIMBLに頼ろう SIMple Bundle Loader Cocoaアプリに外部プラグインをロードさせる /Library/Application
Support/SIMBL/Plugins
46.
使い方 Info.plist(アプリケーション設定ファイル)に記述 SIMBLTargetApplicationsキーで、以下の辞書の配列を 設定 BundleIdentifier: 対象アプリ MaxBundleVersion: 読ませる最大バージョン MinBundleVersion:
対応する最小のバージョン
47.
+(void)loadを実装する プラグインが読み込まれた際に必ず呼ばれるメッ セージ シングルトンインスタンスを返す実装が望まし い 複数回呼ばれる場合がある -initのつもりで書いてはだめ
48.
SIMBLはIMじゃないの? AppleScriptを侵入経路として使っているらしい IMを使う方法は最新ではない
49.
準備 1. アプリケーションの起動監視アプリを用意 2. AppleEvent
Handlerアプリを別途用意 手順 1. アプリの起動を検知 2. 起動したアプリに対して、Handlerを起動するAppleEvent を送信 3. HandlerはSIMBLプラグインを読み込む
50.
本日使う技術 アプリに侵入しよう! アプリを理解しよう! アプリを乗っ取ろう! アプリを操作しよう!
51.
で、何を書き換えればいいの?
52.
侵入したそのあとに 「侵入してもグローバル変数しか書き換えられま せん」では意味が無い しかも書き換えられるグローバル変数すら分か らない せめて乗っ取れる機能とか調べたいよね
53.
ここで問題だ バイナリの固まりであるアプリケーションから どうやってAPIを見つけ出すか 1. ハンサムなデバッガが突如ソレらしいメソッド を発見してくれる 2. それっぽいツールが助けてくれる 3.
何も無い、現実は非常である
54.
1を試す 1.XCode.appを起動する 2.対象アプリにアタッチし、無 理矢理停止する 3.目標の関数が起動しそうなイ ベントを発火させる 4.Step & Trace!
55.
(僕には)無理でした (努力次第ではなんとかなりそう)
56.
57.
2を試す あー、どこかにコマンド一発で@interface情報をま とめてくれる便利なコマンド無いかなー カテゴリとかもちゃんと区別して出力してくれる と良いなー メンバ変数とかプライベートメソッドとか出力さ れたら言う事無いんだけどなー
58.
Class-dump http://stevenygard.com/projects/class-dump/ command-line utility for
examining the Objective-C runtime information stored in Mach-O files.
59.
Usage: class-dump [options]
<mach-o-file> -C <regex> 正規表現にマッチするもののみを 出力 -H ヘッダーファイルとして出力 -r 共有ライブラリも出力 --sdk-root SDKのパスを指定
60.
Dock.appで試す class-dump /System/Library/CoreServices/Dock.app/ Contents/MacOS/Dock -H
--sdk-root /Applications/ Xcode.app/Contents/Developer/Platforms/ MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk -H: ヘッダーファイルとして出力 --sdk-root: ヘッダーファイルにシステムのフ レームワークを含めない
61.
62.
CALayer- CALayerAdditions.h CALayer- ECModalEventDeleg ate.h CDStructures.h DBAttachedWindow .h DBDebugWidgetPro cess.h DBDebugWidgetSer ver.h DBRippleInfo.h DBSpringboard.h DBWidget.h DBWidgetProcess.h DOCKAppDeathEve nt.h DOCKAppHideEvent. h DOCKAppLaunchCo mpleteEvent.h DOCKAppLaunchEv ent.h DOCKAppNeedsAtte ntionEvent.h DOCKAppRevealEve nt.h DOCKAutoHideDisa bledEvent.h DOCKAutoHideEnab ledEvent.h DOCKBlockEvent.h DOCKBounceEvent. h DOCKDashboardTile .h DOCKDesktopTile.h DOCKDisplayChang edEvent.h DOCKDownloadDire ctory.h DOCKDownloadMan ager.h DOCKDownloadPro gressHandler- Protocol.h DOCKDragDropEven t.h DOCKDragEnterEve nt.h DOCKDragLeaveEve nt.h DOCKDynamicFolde r.h DOCKEvent.h DOCKExtraDelegate -Protocol.h DOCKFileTile.h DOCKFileTileFactory .h DOCKFloorLayer.h DOCKFloorShadowL ayer.h DOCKFolder.h DOCKFolderTile.h DOCKFolderTileCac heEntry.h DOCKGestureDefaul tHandler.h DOCKGestureEvent. h DOCKGestureHandl er-Protocol.h DOCKGestures.h DOCKGlassFloorLay er.h DOCKGridLayer.h DOCKIndicatorLayer .h DOCKInsertTile.h DOCKInstallAddOpe ration.h DOCKInstallMoveOp eration.h DOCKInstallOperati on.h DOCKInstallRemove Operation.h DOCKInstallTransac tion.h DOCKInstallUpdate Operation.h DOCKInternalDropE vent.h DOCKLabelLayer.h DOCKMaximizeWin dowEvent.h DOCKMaximizeWin dowWithOrderEvent .h DOCKMaximizeWin dowsEvent.h DOCKMiniView.h DOCKMiniViewLayer .h DOCKMinimizedWin dow.h DOCKMinimizedWin dowEvent.h DOCKMinimizedWin dowsEvent.h DOCKMouseEnterEv ent.h DOCKMouseLeaveE vent.h DOCKOrientationCh angedEvent.h DOCKPSNEvent.h DOCKPeriodicMess ageTrace.h DOCKPreferences.h DOCKProcessTile.h DOCKRecentsContr oller.h DOCKRecentsModel .h DOCKRecentsTile.h DOCKReflectionLay er.h DOCKRemoveWindo wsEvent.h DOCKScreenSharin gModel.h DOCKScreenSharin gTile.h DOCKSeparatorTile. h DOCKSetWindowTitl eEvent.h DOCKSideGlassFloo rLayer.h DOCKSmartFolderTi le.h DOCKSpacerTile.h DOCKStack.h DOCKStackActionH andling-Protocol.h DOCKStackActionS ender-Protocol.h DOCKStackAnimato r.h DOCKStackBackgro undLayer.h DOCKStackBlurWin dow.h DOCKStackCollapse dDataSource- Protocol.h DOCKStackDataSou rceClient-Protocol.h DOCKStackExpande dDataSource- Protocol.h DOCKStackExpande dHandler.h DOCKStackExpande dItemLayer.h DOCKStackExpande dLayer.h DOCKStackFanAnim ator.h DOCKStackFanItem Layer.h DOCKStackFanLaye r.h DOCKStackGoBack ButtonLayer.h DOCKStackGridAni mator.h DOCKStackGridHov erLayer.h DOCKStackGridItem Layer.h DOCKStackGridLaye r.h DOCKStackItem- Protocol.h DOCKStackLayer.h DOCKStackListAnim ator.h DOCKStackListItem Layer.h DOCKStackListLaye r.h DOCKStackPreview. h DOCKStaticScreenS haringModel.h DOCKTileEvent.h DOCKTileLabelLayer .h DOCKTileLayer.h DOCKTileRemovedE vent.h DOCKTileShadowLa yer.h DOCKTrashTile.h DOCKURLTile.h DOCKUpdateMinimi zedWindowEvent.h DOCKWindowCopy. h DOCKWindowEvent. h DOCKWindowTile.h DOCKWindowUnreg isteredEvent.h DPAnimationTimer. h DPBackgroundDesk topPicture.h DPBackgroundDesk topPictureInfo.h DPColorSpace.h DPDefaultPictureInf o.h DPDesktopPicture.h DPDesktopPictureM anager.h DPDesktopWindow- Protocol.h DPDirectoryFileListi ng.h DPDummyRenderO bject.h DPFileListing.h DPPictureInfo.h DPPictureStorage.h DPRemoteConnecti on.h DPSharedDesktopI mage.h DPSharedSlot.h DPStatementCache. h DPTiledPictureInfo. h DPWakeupSource.h DPiLifeFileListing.h DRAGTimerInfo.h DockExtra- Protocol.h DockExtra.h DockExtraManager. h DockExtraServer.h DockNotificationCe nter.h ECAlertPanel.h ECAlertPanelDelega te-Protocol.h ECAliasHandle.h ECButtonLayer.h ECCalloutLayer.h ECConsedEvent.h ECCoverFlow.h
63.
64.
無数にソレっぽいファイルが出て来た 概観すると4つくらいの名前空間が見える WVSystemSpace.h LPAppManager.h ECCoverFlowItemLayer.h DOCKStackListLayer.h
65.
WV系はなぜかSpacesっぽい名前のクラスが多い? ソレらしいメンバ変数を持つクラスを乗っ取れば 操作が出来るに違いない ソレらしいイベントリスナーを持つクラスを乗っ 取れば、イベントドリブンが成立するに違いない
66.
本日使う技術 アプリに侵入しよう! アプリを理解しよう! アプリを乗っ取ろう! アプリを操作しよう!
67.
おまたせしました 乗っ取りのお時間です
68.
乗っ取り乗っ取り言うけどさ 具体的な乗っ取り手法って? poisng(古い) method swizzling(新しい)
69.
まずはpoisngから posing: 「クラステーブルを書き換えることでクラ スの実体を置き換える技法。」 via Wikipedia 既存のクラスを実行時に置き換える手法らしい
70.
ClassAをClassBでposingを用いて乗っ取る例 制限 ClassBはClassAの直接のサブクラスであること ClassBはメンバ変数を持たないこと ClassAのインスタンスが存在しないこと
71.
図 ClassA instanceA2instanceA1 posing ClassB instanceA2instanceA1 ClassA
72.
poseAsClass:によって実現できた 現在(ObjC2.0)では推奨されない
73.
Method Swizzling メソッドの実装を動的に入れ替える技法 libobjcランタイムでサポート ObjC2.0でも動作
74.
libobjcの関数群 Method class_getInstanceMethod(Class aClass,
SEL aSelector) Classからインスタンスメソッドを取得 Method class_getClassMethod(Class aClass, SEL aSelector) Classからクラスメソッドを取得
75.
libobjcの関数群 id objc_getClass(const char
*name) nameクラスのClassを得る NSClassFromStringでも可 void method_exchangeImplementations(Method m1, Method m2) Methodの実装を置換する
76.
例: 既存クラスのインスタンスメソッド同士を置換 void SwizzleInstanceMethod
(Class cls, SEL old, SEL new) { Method mold = class_getInstanceMethod(cls, old); Method mnew = class_getInstanceMethod(cls, new); if (mold && mnew) method_exchangeImplementations(mold, mnew); }
77.
実際の使い方 カテゴリを使って対象クラスにメソッドを追加し、 swizzlingする 元のメソッドを呼び出す場合は自分自身を呼び出 す事で実現 実装が入れ替わっているため
78.
乗っ取り用メソッド実装例 @implementation NSObject (BlackDock) -
(void)BlackDock_DOCKTrashTile_open { [self BlackDock_DOCKTrashTile_open]; [self someEventHook]; } @end
79.
乗っ取り例 @implementation BlackDock + (void)load {
Class cls = NSClassFromString(@"DOCKTrashTile"); SEL old = @selector(open); SEL new = @selector(BlackDock_DOCKTrashTile_open); SwizzleInstanceMethod(cls, old, new); } @end
80.
例の解説 DOCKTrashTileというクラスのopenを BlackDock_DOCKTrashTile_openで置換 openの元の実装の挙動を優先する 乗っ取るメソッドは@selectorで指定
81.
本日使う技術 アプリに侵入しよう! アプリを理解しよう! アプリを乗っ取ろう! アプリを操作しよう!
82.
ヘッダーを再配布したら怒られない?
83.
無理矢理呼び出しましょう あると分かっているならリフレクション使えば良 いよね メンバ変数を呼ぶ時: class_getInstanceVariable メンバメソッドを呼ぶ: NSInvocation
84.
変数読み出し Ivar class_getInstanceVariable(Class cls, const
char* name) クラスの表現clsからnameの変数を取り出す id object_getIvar(id object, Ivar ivar) objectから表現ivarに対応する変数の値を得る
85.
例(あるオブジェクトからメンバ変数を取り出す) Ivar getInstanceVariable(id obj,
const char *name, void **value) { Ivar ivar; if ((ivar = class_getInstanceVariable(object_getClass(obj), name))) { if (value) *value = (__bridge void *)object_getIvar(obj, ivar); return ivar; } }
86.
メソッド呼び出し メッセージの識別子としての表現: @selector(hoge:) 方法1 NSInvocation: 静的にメッセージ呼び出しを実現する プロキシクラス 方法2 NSObjectの-performSelector:を使う
87.
NSProxy - (NSMethodSignature *) methodSignatureForSelector:(SEL)aSelector あるオブジェクトのメソッドを表すシグニチャ NSInvocation +
(NSInvocation *)invocationWithMethodSignature: (NSMethodSignature *)signature シグニチャに対して実際に値を適用する
88.
void invoke(id target,
SEL selector, void *arg1, void *ret){ NSMethodSignature *sig = [target methodSignatureForSelector:selector]; NSInvocation* inv = [NSInvocation invocationWithMethodSignature:sig]; [inv setSelector:selector]; // メッセージを [inv setTarget:target]; // どのオブジェクトに対して [inv setArgument:arg1 atIndex:2]; // 第1引数をarg1として [inv invoke]; // 呼び出す [inv getReturnValue:ret]; // 返り値をポインタに代入 }
89.
もう少し楽に え?面倒くさい? 引数無くても書かなきゃならんのか NSObject - (id)performSelector:(SEL)aSelector aSelectorは単項メッセージ限定
90.
例 [spaces performSelector:@selector(displays)] 同じ例 invoke(spaces, @selector(displays),
NULL, NULL);
91.
本日話す事 コレがしたい 前提のお話 今回必要となる技術 実際にアプリを見てみよう
92.
本日のテーマ Dock.app
93.
サンプルアプリ 作ったもの見せたかったけど時間無いしね サンプルアプリ「BlackDock.app」 ゴミ箱をクリックしたらDockがかっこ良くなる
94.
仕組み 1. ゴミ箱のクリックのイベントを監視する 2. Dockのベースを形作るビューを取得する 3.
自力で書いたレイヤーで置き換える
95.
だします
Télécharger maintenant