• No results found

Programming Cocoa with Ruby Create Compelling Mac Apps Using RubyCocoa

N/A
N/A
Protected

Academic year: 2021

Share "Programming Cocoa with Ruby Create Compelling Mac Apps Using RubyCocoa"

Copied!
7
0
0

Loading.... (view fulltext now)

Full text

(1)

Programming

Cocoa

with

Ruby

Create

Compelling

Mac

Apps Using

RubyCocoa

Brian Mariek

The

Pragmatic

Bookshelf
(2)

1 Introduction 1

1.1 WhatIs Cocoa? 2

1.2 What Is

RubyCocoa?

2

1.3 What's ItLike toLearn Cocoa

Using

Ruby?

2

1.4

RubyCocoa?

That's So Last Year! 3

1.5

Prerequisites

3

1.6 Versions 5

1.7 Our

Example App

6

1.8 Centuries of the Bookmaker's Art: Scorned 8

1.9 Some

Terminology

9

1.10 Service After the Sale 9

1.11

Solving

Problems 9

1.12

Acknowledgments

10

2 How Do We Get This

Thing

Started? 13

2.1 A

Program

That Prints 14

2.2

Putting

anItem in the Status Bar 17

2.3 Menus 18

2.4 An

Application

Bundle 22

2.5 WhatNow? 26

I A First Realistic

App

27

3

Working

with Interface Builder and Xcode 29

3.1 The Basics 30

3.2

Creating

and

Editing

Classes in Xcode 40

3.3

Debugging

47

3.4

Synchronizing

Interface Builder and Xcode 49 3.5 Attributes 50
(3)

vlii CONTENTS

3.7

Tiy

This Yourself 53

3.8 What Now? 53

4 One Good

App

Observes Another 55

4.1 Notifications Within an

App

55

4.2 Notifications Between

Apps

60

4.3 The

App

to Fenestrate 63 4.4

Putting

Notification

Handling

Behind the GUI 64

4.5

Reopening Objective-C

Classes 66

4.6 What Now? 66

II

Reshaping

Fenestra 69

5 A Better GUI 71

5.1

Toggle

Buttons 72

5.2 The Default Button 73 5.3 Combo Box Items 74

5.4 The Initial First

Responder

75

5.5

Try

ThisYourself 75

5.6 What Now? 76

6

Decoupled

Controllers 77

6.1

Ignorant Objects

78

6.2

Extracting

Subclasses 80

6.3

Reacting

to Button State 85

6.4

Using

Nibs toAvoid

Dependencies

85

6.5

Initializing

Combo Boxes 87

6.6 What Now? 88

7 Notifications Connect

Decoupled Objects

89 7.1 Controllers 89

7.2 Translators and the

Rising

Tide of

Ugliness

91

7.3 WhatNow? 94

8 More

Expressive

Code 95

8.1 A DSL for Notifications 96 8.2

RubyCocoa

Has Two

Ways

of

Referring

to

Superclasses

98

8.3 Shorthand for

Posting

Notifications 98

8.4

Try

ThisYourself 100
(4)

III

Project

Mechanics

103

9

Bundling

Gems and Libraries withYour

App

105

9.1 Manual Control 106

9.2

Standaloneify

110

9.3 What Now? 112

10

Project Organization,

Builds,

and Your Favorite Editor 113

10.1

Groups

114

10.2

Using

Xcode with Hierarchical

Project

Folders 115

10.3

Running

in Place 117

10.4

Building

Without Xcode 117

10.5

Using

Interface Builder with Hierarchical

Project

Folders 119

10.6

Starting

aNew

Project

120

10.7 What Now? 121 IV Declarative Data

Handling

123

11 PersistentUser Preferences 125 11.1 The User Preferences

System

126 11.2

Storing

Custom

Objects

as Preferences 129

11.3

Using

Archived

Objects

137

11.4 Views Can PullData 141

11.5

Try

This Yourself:A

Sticky

Window 143 11.6 What Now? 147 12

Creating

aPreference Panel in aNew Nib 149

12.1

Creating

a Nib 150

12.2

Drawing

the Panel 152

12.3

Hooking

the Panel to the

App

154

12.4 The Nib File's Owner 157

12.5 IB's First

Responder Pseudo-Object

158

12.6

Memory

Leaks 159

12.7 What Now? 160

13

Implementing

a Preference Panel with Cocoa

Bindings

161

13.1

Binding

a

Simple

Value 161

13.2

Binding

an

Array

of Hashes 165

13.3 Formatters 171 Transformers

(5)

x CONTENTS

13.5

Adding

and

Deleting

Table Rows 181

13.6 What Now? 183

14

Setting

Up

Bindings

with Code 185

14.1 Oh No!

Terminology!

185

14.2

Using

Rooted

Keypaths

inCode 189

14.3

Subclassing NSArrayController

189

14.4

bind_toObject_withKeyPath_options

192 14.5 What Now? 196

V

Fun

with Tables 197

15

Prologue:

Folders and Tests 199

15.1 Disk

Layout

199

16 Selections and

Editing

203

16.1 An

Example

of

Creating

Tests: The AddMethod .... 203

16.2

Working

with an

Uncooperative

Control 213

16.3

Try

This Yourself 221

16.4

Building

Setup

Methods 228

16.5 What Now? 230 17 Buttons in Tables 231

17.1 Cells 231

17.2

Making

the

Change

232

17.3 What Now? 234 18A Formatter with Two Wrinkles 235

18.1 The Formatter Code 236 18.2

Calling

Methods ThatTake Reference

Arguments

... 238

18.3

Breaking Encapsulation

in Tests 241

18.4 What Now? 243

19

Picking

Files with

Open

Panels 245

19.1

NSOpenPanel

245

19.2 A

Design

for

Using NSOpenPanel

inFenestra 248

19.3

Try

This Yourself: PreferencesControllerTests 250 19.4

Try

ThisYourself: The

NSOpenPanel

Controller .... 258
(6)

20

Drag

and

Drop

263

20.1 How

Drag

and

Drop

Works 263

20.2

Designing

the GUI 265

20.3 A

Template

for the Solution 266

20.4

Utility

Classes and Modules 267

20.5

Try

This Yourself:

Lively

Dragging

Info 270 20.6

Try

ThisYourself:

Drag

and

Drop

277

20.7 Does It Work? 282

20.8 What Now? 283 21

Epilogue:

AWonderful World ofTests 285

21.1 Test-Driven

Design

285

21.2 To Learn More 288

VI

Wrapping

Up

289

22 Fit and Finish 291

22.1

Saving

the Window Position UntiltheNext Launch . . 291

22.2 Tab Behavior 292 22.3

Using

NSMatrix to

Organize

Buttons 293

22.4

Sizing

297

22.5

Cleaning

Up

the Menu Bar 301

22.6 The About Window 301

22.7

Changing

the

Application's

Name 303

23

Adding Help

305

23.1

Help

Book Basics 305

23.2

Creating

a

Help

Book 306

23.3

Editing

Pages

307

23.4

Hooking

a

Help

Book intoan

App

313

23.5 AWorkflow for

Creating Help

Book

Pages

315

23.6

Tooltips

315

24 Document-Based

Applications

317

24.1 The

Major Players

318

24.2 The

Responder

Chain 320

24.3

Creating

a New Document 323

24.4

Opening

and

Saving

Documents 332

24.5

Editing

334
(7)

xli CONTENTS 25

MacRuby

339 25.1

Getting

MacRuby

342 25.2

MacRuby

Basics 342 25.3 A

MacRuby

Checklist 344 25.4 What Now? 348 VII Reference 349

26 The

Objective-C

Bridge

and

Bridge

Metadata 351

26.1 An

Unexpected

Return Value 351

26.2 What Information Can Be Found at Runtime? 352

26.3

Supplementing

Runtime Information 353 26.4 Our Own Private Metadata 354

26.5

Finding

Out More 355

27 The

Underpinnings

ofCocoa

Bindings

357

27.1

Requirements

357

27.2 Our Goal 358

27.3

Declaring

Observed

Properties

359

27.4

Observing

Changes

360

27.5

Implementing bind_toObject_withKeyPath_options

. . 362

27.6

Changing

the Value ofan Observed

Key

363

27.7 In

Summary

364

27.8

Postscript: Observing Changes

to Collections 366

A

Glossary

369

B

Bibliography

381

References

Related documents

This aspect of hyperbolic geometry belongs in the Navigation/Star Gazing strand of geometry, in the sense that differential geometry of surfaces (and higher-dimensional manifolds)

In this study, we investigated cortical activation patterns using five types of experimental sentences, and evaluated whether or not differences exist in the

In or- der to obtain the average emission during the low gamma-ray state we apply the same procedure as for the R-band flux; how- ever we apply a larger margin in time, using the

Community Discourse Organizational Learning About Organizational Learning by Doing Know-what Know-why Know-how Know-what Know-why Know-how 1 5 6 2 4 3 Knowledge flows addressed by

–  As a group improved/improving outcomes with early intervention •  Some interesting issues. –  University based/affiliated

The proposed methodology is based on an analytical approach that compares the value of travel time savings (for passengers and transit vehicles) with the construction and

Moreover, all versions of the PNM performed well in reproducing the structure of the observed network, whereas networks generated by the two simpler models did not reproduce

AIG and Chubb and certain of the other Investors currently offer or may offer coverage in various lines in which [AWAC] may offer coverage.” In fact, at least three of