-
Notifications
You must be signed in to change notification settings - Fork 3
/
listing5.html
executable file
·293 lines (246 loc) · 13 KB
/
listing5.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<!-- BEGIN META TAG INFO -->
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link rel="home" href="http://developer.apple.com/">
<link rel="find" href="http://developer.apple.com/search/">
<link rel="stylesheet" type="text/css" href="../../documentation/css/adcstyle.css" title="fonts">
<script language="JavaScript" src="../../documentation/js/adc.js" type="text/javascript"></script>
<!-- END META TAG INFO -->
<!-- BEGIN TITLE -->
<title>iChatStatusFromApplication - /ReadMe.txt</title>
<!-- END TITLE -->
<script language="JavaScript">
function JumpToNewPage() {
window.location=document.scpopupmenu.gotop.value;
return true;
}
</script>
</head>
<!-- BEGIN BODY OPEN -->
<body>
<!--END BODY OPEN -->
<!-- START CENTER OPEN -->
<center>
<!-- END CENTER OPEN -->
<!-- BEGIN LOGO AND SEARCH -->
<!--#include virtual="/includes/adcnavbar"-->
<!-- END LOGO AND SEARCH -->
<!-- START BREADCRUMB -->
<div id="breadcrumb">
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td scope="row"><img width="340" height="10" src="images/1dot.gif" alt=""></td>
<td><img width="340" height="10" src="images/1dot.gif" alt=""></td>
</tr>
<tr valign="middle">
<td align="left" colspan="2">
<a href="http://developer.apple.com/">ADC Home</a> > <a href="../../referencelibrary/index.html">Reference Library</a> > <a href="../../samplecode/index.html">Sample Code</a> > <a href="../../samplecode/AppleApplications/index.html">Apple Applications</a> > <a href="../../samplecode/AppleApplications/idxiChat-date.html">iChat</a> > <A HREF="javascript:location.replace('index.html');">iChatStatusFromApplication</A> >
</td>
</tr>
<tr>
<td colspan="2" scope="row"><img width="680" height="35" src="images/1dot.gif" alt=""></td>
</tr>
</table>
</div>
<!-- END BREADCRUMB -->
<!-- START MAIN CONTENT -->
<!-- START TITLE GRAPHIC AND INTRO-->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td><h1><div id="pagehead">iChatStatusFromApplication</div></h1></td>
</tr>
</table>
<!-- END TITLE GRAPHIC AND INTRO -->
<!-- START WIDE COLUMN -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr align="left" valign="top">
<td id="scdetails">
<h2>/ReadMe.txt</h2>
<form name="scpopupmenu" onSubmit="return false;" method=post>
<p><strong>View Source Code:</strong>
<select name="gotop" onChange="JumpToNewPage();" style="width:340px"><option selected value="ingnore">Select File</option>
<option value="listing1.html">/iChat.h</option>
<option value="listing2.html">/ISFAController.h</option>
<option value="listing3.html">/ISFAController.m</option>
<option value="listing4.html">/main.m</option>
<option value="listing5.html">/ReadMe.txt</option></select>
</p>
</form>
<p><strong><a href="iChatStatusFromApplication.zip">Download Sample</a></strong> (“iChatStatusFromApplication.zip”, 105.2K)<BR>
<strong><a href="iChatStatusFromApplication.dmg">Download Sample</a></strong> (“iChatStatusFromApplication.dmg”, 161.3K)</p>
<!--
<p><strong><a href="#">Download Sample</a></strong> (“filename.sit”, 500K)</p>
-->
</td>
</tr>
<tr>
<td scope="row"><img width="680" height="10" src="images/1dot.gif" alt=""><br>
<img height="1" width="680" src="images/1dot_919699.gif" alt=""><br>
<img width="680" height="20" src="images/1dot.gif" alt=""></td>
</tr>
<tr>
<td scope="row">
<!--googleon: index -->
<pre class="sourcecodebox">File: ReadMe.txt
Abstract: ReadMe file for the iChatStatusFromApplication sample.
Version: 1.1
Disclaimer: IMPORTANT: This Apple software is supplied to you by
Apple Inc. ("Apple") in consideration of your agreement to the
following terms, and your use, installation, modification or
redistribution of this Apple software constitutes acceptance of these
terms. If you do not agree with these terms, please do not use,
install, modify or redistribute this Apple software.
In consideration of your agreement to abide by the following terms, and
subject to these terms, Apple grants you a personal, non-exclusive
license, under Apple's copyrights in this original Apple software (the
"Apple Software"), to use, reproduce, modify and redistribute the Apple
Software, with or without modifications, in source and/or binary forms;
provided that if you redistribute the Apple Software in its entirety and
without modifications, you must retain this notice and the following
text and disclaimers in all such redistributions of the Apple Software.
Neither the name, trademarks, service marks or logos of Apple Inc.
may be used to endorse or promote products derived from the Apple
Software without specific prior written permission from Apple. Except
as expressly stated in this notice, no other rights or licenses, express
or implied, are granted by Apple herein, including but not limited to
any patent rights that may be infringed by your derivative works or by
other works in which the Apple Software may be incorporated.
The Apple Software is provided by Apple on an "AS IS" basis. APPLE
MAKES NO WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION
THE IMPLIED WARRANTIES OF NON-INFRINGEMENT, MERCHANTABILITY AND FITNESS
FOR A PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND
OPERATION ALONE OR IN COMBINATION WITH YOUR PRODUCTS.
IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL
OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
INTERRUPTION) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION,
MODIFICATION AND/OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED
AND WHETHER UNDER THEORY OF CONTRACT, TORT (INCLUDING NEGLIGENCE),
STRICT LIABILITY OR OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGE.
Copyright (C) 2008 Apple Inc. All Rights Reserved.
"iChatStatusFromApplication" demonstrates how to use the Scripting Bridge
framework to communicate with iChat. It uses the Accessibility API to listen for
frontmost application change events, then uses the scripting bridge to set the
user's status message and icon to represent what application they are currently
using. The user's status message is set to "Using Safari" if Safari is the
frontmost application, for example. It also presents the user with a "Join
Chat" button that, when clicked, uses the scripting bridge to ask iChat to join
a specific AIM chat room ("ichatstatus"). You could use this or similar
techniques to, for example, allow users of an application to join a discussion
or support AIM chat room for that app.
"iChatStatusFromApplication" requires that "Enable access for assistive
devices" be enabled in your Universal Access preferences in order to listen for
active-application-changed events. It is worth noting that turning on "Enable
access for assistive devices" is not a requirement for using the Scripting
Bridge framework with iChat.
Building the Sample
1. Create a new project.
"iChatStatusFromApplication" is a Cocoa application. Open Xcode, choose File >
New Project and select Cocoa Application under application in the New Project
Assistant window. Click Next and save the project as iChatStatusFromApplication.
2. Add the Scripting Bridge framework to your project.
Open the Frameworks and Libraries group in the Groups & Files list of the
project window and then right-click or control-click on the Linked Frameworks
subgroup. Choose Add > Existing Frameworks from the pop-up menu and navigate to
the /System/Library/Frameworks/ folder to select and add the
ScriptingBridge.framework to your project.
3. Add the minimum system version Info.plist key
This project uses the Scripting Bridge framework that is only available in Mac
OS X 10.5 and later. Set the LSMinimumSystemVersion to 10.5 so users can receive
notices informing them about the minimum system requirement when they attempt to
run the application on a system earlier than Mac OS X 10.5.
Double-click the Info.plist file in the resource area of the project and copy
and paste the following lines into the file.
<key>LSMinimumSystemVersion</key>
<string>10.5</string>
4. Set the Target SDK to Mac OS X 10.5
Double-click the iChatStatusFromApplication project icon in the Groups & Files
list. When the project info window appears, go to the General tab and set the
"Cross-Develop Using Target SDK" to Mac OS X 10.5.
5. Create iChat header file
Open the Terminal application and run the following command:
sdef /Applications/iChat.app | sdp -fh --basename iChat
You should see an iChat.h file in your working directory. Drag and drop iChat.h
into the Other Sources group in your Xcode project window. Check "Copy items
into destination group's folder (if needed)" in the ensuing dialog.
6. Create the ISFAController’s class files
Select File > New File and click Objective-C class under Cocoa in the New File
Assistant window. Name the file ISFAController and check the "Also create..."
checkbox if unchecked.
7. Add the iChat header and define a scripting bridge object in the
ISFAController.h file. See the ISFAController.h file in this sample for its
implementation.
8. Add Scripting Bridge to the code
the "joinChatRoom" method in the ISFAController.m file describes how to use the
Scripting Bridge to communicate with iChat.
9. Add code to watch for application switch events
The "registerForAppSwitchNotificationFor" method in the ISFAController.m file
describes how to watch for an application switch events. It uses an
accessibility observer to pay attention to an application switch events.
10. Add code to update the current status and icon of users
The "applicationSwitched" method in the ISFAController.m file refreshes the
current status and icon of users in iChat and "iChatStatus" window.
11. Build and run the sample
Click the Build and Go toolbar item in the project window to compile and run
the sample.
Using the Sample
Turn on the "Enable access for assistive devices" (if disabled) in your
Universal Access preferences.
Open this sample in Xcode 3.0 and Mac OS X 10.5 and later. Click the Build and
Go toolbar item in the project window to compile and run the application.
Switch to another application to see your status message and icon changed to
your frontmost application's name and icon.
Click the "Join Chat Room" button to join the "ichatstatus" AIM chat room in
iChat. iChat will join the chat room in the same way as if you had selected to
do so manually within iChat, so all normal actions will then work - for example,
you can show/hide the participants drawer using the View < Show/Hide Chat
Participants menu item, click the "+" button in the drawer to invite and add a
user to the chat room.
Changes from Previous Versions
Updated sample to work with released Leopard instead of WWDC 2007 Leopard Beta.
Check if the "Enable access for assistive devices" feature is turned on and
warn users if it is not.
Feedback and Bug Reports
Please send all feedback about this sample by using the Feedback form on the
bottom of the sample's webpage.
Please submit any bug reports about this sample to the Bug Reporting
<http://developer.apple.com/bugreporter> page.</pre>
<!--googleoff: index -->
</td>
</tr>
</table>
<!-- END WIDE COLUMN -->
<!-- END MAIN CONTENT -->
<table width="680" border="0" cellpadding="0" cellspacing="0">
<tr>
<td><div style="width: 100%; height: 1px; background-color: #919699; margin-top: 5px; margin-bottom: 15px"></div></td>
</tr>
<tr>
<td align="center"><br/>
<table border="0" cellpadding="0" cellspacing="0" class="graybox">
<tr>
<th>Did this document help you?</th>
</tr>
<tr>
<td>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=1&url=/samplecode/iChatStatusFromApplication/listing5.html%3Fid%3DDTS10004352-1.1&media=dvd" target=_new>Yes</a>: Tell us what works for you.</div>
<div style="margin-bottom: 8px"><a href="http://developer.apple.com/feedback/?v=2&url=/samplecode/iChatStatusFromApplication/listing5.html%3Fid%3DDTS10004352-1.1&media=dvd" target=_new>It’s good, but:</a> Report typos, inaccuracies, and so forth.</div>
<div><a href="http://developer.apple.com/feedback/?v=3&url=/samplecode/iChatStatusFromApplication/listing5.html%3Fid%3DDTS10004352-1.1&media=dvd" target=_new>It wasn’t helpful</a>: Tell us what would have helped.</div>
</td>
</tr>
</table>
</td>
</tr>
</table>
<!-- START BOTTOM APPLE NAVIGATION -->
<!--#include virtual="/includes/footer"-->
<!-- END BOTTOM APPLE NAVIGATION -->
<!-- START CENTER CLOSE -->
</center>
<!-- END CENTER CLOSE -->
</body>
</html>