Merge lp:~urbanape/ubuntuone-ios-music/fix-appserver-base-url into lp:ubuntuone-ios-music

Proposed by Zachery Bir
Status: Merged
Approved by: Jason Foreman
Approved revision: 213
Merged at revision: 206
Proposed branch: lp:~urbanape/ubuntuone-ios-music/fix-appserver-base-url
Merge into: lp:ubuntuone-ios-music
Diff against target: 1026 lines (+408/-105)
20 files modified
.bzrignore (+1/-0)
Other Sources/U1MusicAppDelegate.h (+0/-1)
Other Sources/U1MusicAppDelegate.m (+23/-0)
TestFlight SDK/README.txt (+160/-0)
TestFlight SDK/TestFlight.h (+35/-0)
TestFlight SDK/release_notes.txt (+21/-0)
U1Music-Info.plist (+1/-7)
U1Music.xcodeproj/project.pbxproj (+60/-3)
U1Music_Prefix.pch (+1/-0)
controls/AlertPrompt.m (+1/-1)
models/Album.m (+1/-1)
models/Artist.m (+1/-1)
models/Playlist.m (+1/-1)
utilities/Subsonic.h (+5/-3)
utilities/Subsonic.m (+19/-12)
utilities/operations/AlbumArtLoader.m (+1/-1)
view_controllers/PlaylistEditViewController.m (+1/-1)
view_controllers/PlaylistViewController.m (+1/-1)
view_controllers/SubsonicTableViewController.m (+1/-1)
xibs/MainWindow.xib (+74/-71)
To merge this branch: bzr merge lp:~urbanape/ubuntuone-ios-music/fix-appserver-base-url
Reviewer Review Type Date Requested Status
Jason Foreman (community) Approve
Review via email: mp+81195@code.launchpad.net

Description of the change

This branch splits out the URLs for metadata and streaming requests

To post a comment you must log in.
Revision history for this message
Jason Foreman (threeve) :
review: Approve
214. By Zachery Bir

Also use getMetadataURL in various places that ask for it.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1=== modified file '.bzrignore'
2--- .bzrignore 2011-07-25 16:01:23 +0000
3+++ .bzrignore 2011-11-05 00:45:27 +0000
4@@ -5,3 +5,4 @@
5 U1Music.xcodeproj/*.mode1v3
6 U1Music.xcodeproj/xcuserdata
7 U1Music.xcodeproj/project.xcworkspace/
8+U1TestFlightTeamToken.txt
9
10=== modified file 'Other Sources/U1MusicAppDelegate.h'
11--- Other Sources/U1MusicAppDelegate.h 2011-07-25 16:07:02 +0000
12+++ Other Sources/U1MusicAppDelegate.h 2011-11-05 00:45:27 +0000
13@@ -31,7 +31,6 @@
14 @class Reachability;
15
16 @interface U1MusicAppDelegate : NSObject <UIApplicationDelegate> {
17-
18 UIWindow *window;
19 UITabBarController *tabBarController;
20 }
21
22=== modified file 'Other Sources/U1MusicAppDelegate.m'
23--- Other Sources/U1MusicAppDelegate.m 2011-07-25 16:07:02 +0000
24+++ Other Sources/U1MusicAppDelegate.m 2011-11-05 00:45:27 +0000
25@@ -45,6 +45,7 @@
26 - (void)parseQueryCredentials:(NSURL*)anURL;
27 - (BOOL)configureUsernamePassword;
28 - (void)presentLoginView;
29+- (void)prepareTestFlight;
30 @end
31
32
33@@ -59,6 +60,8 @@
34
35 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
36 {
37+ [self prepareTestFlight];
38+
39 [self recoverState];
40
41 window.backgroundColor = [UIColor viewFlipsideBackgroundColor];
42@@ -163,6 +166,26 @@
43 [[NSNotificationCenter defaultCenter] postNotificationName:NOTIF_reloadAccountCredentials object:nil];
44 }
45
46+- (void)prepareTestFlight;
47+{
48+ NSString *tokenFilePath = [[NSBundle mainBundle] pathForResource:@"U1TestFlightTeamToken" ofType:@"txt"];
49+ if (!tokenFilePath)
50+ return;
51+
52+ NSError *error = nil;
53+ NSString *teamToken = [NSString stringWithContentsOfFile:tokenFilePath usedEncoding:NULL error:&error];
54+
55+ if (teamToken)
56+ {
57+ teamToken = [teamToken stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceAndNewlineCharacterSet]];
58+ [TestFlight takeOff:teamToken];
59+ }
60+ else
61+ {
62+ NSLog(@"error loading TestFlight team token: %@", error);
63+ }
64+}
65+
66 #pragma mark -
67 #pragma mark Memory management
68
69
70=== added directory 'TestFlight SDK'
71=== added file 'TestFlight SDK/README.txt'
72--- TestFlight SDK/README.txt 1970-01-01 00:00:00 +0000
73+++ TestFlight SDK/README.txt 2011-11-05 00:45:27 +0000
74@@ -0,0 +1,160 @@
75+Thanks for downloading the TestFlight SDK!
76+
77+This document is also availale on the web at https://www.testflightapp.com/sdk/doc
78+
79+1. Why use the TestFlight SDK?
80+2. Considerations
81+3. How do I integrate the SDK into my project?
82+4. Using the Checkpoint API
83+5. Using the Feedback API
84+6. Upload your build
85+7. Questions API
86+8. View your results
87+9. Advanced Exception Handling
88+
89+START
90+
91+
92+1. Why use the TestFlight SDK?
93+
94+The TestFlight SDK allows you to track how beta testers are testing your application. Out of the box we track simple usage information, such as which tester is using your application, their device model/OS, how long they used the application, logs of their test session, and automatic recording of any crashes they encounter.
95+
96+To get the most out of the SDK we have provided the Checkpoint API.
97+
98+The Checkpoint API is used to help you track exactly how your testers are using your application. Curious about which users passed level 5 in your game, or posted their high score to Twitter, or found that obscure feature? With a single line of code you can find gather all this information. Wondering how many times your app has crashed? Wondering who your power testers are? We've got you covered. See more information on the Checkpoint API in section 4.
99+
100+Alongside the Checkpoint API is the Questions interface. The Questions interface is managed on a per build basis on the TestFlight website. Find out more about the Questions Interface in section 6.
101+
102+2. Considerations
103+
104+
105+Information gathered by the SDK is sent to the website in real time. When an application is put into the background (iOS 4.x) or terminated (iOS 3.x) we try to send the finalizing information for the session during the time allowed for finalizing the application. Should all of the data not get sent the remaining data will be sent the next time the application is launched. As such, to get the most out of the SDK we recommend your application support iOS 4.0 and higher.
106+
107+This SDK can be run from both the iPhone Simulator and Device and has been tested using XCode 4.0.
108+
109+3. How do I integrate the SDK into my project?
110+
111+
112+1. Add the files to your project: Project -> Add to Project -> TestFlightSDK
113+
114+ 1. Copy items into destination folder (if needed): Checked
115+ 2. Reference Type: Default
116+ 3. Recursively create groups for added folders
117+
118+2. Verify that libTestFlight.a has been added to the Link Binary With Libraries Build Phase for the targets you want to use the SDK with
119+
120+ 1. Select your Project in the Project Navigator
121+ 2. Select the target you want to enable the SDK for
122+ 3. Select the Build Phases tab
123+ 4. Open the Link Binary With Libraries Phase
124+ 5. If libTestFlight.a is not listed, drag and drop the library from your Project Navigator to the Link Binary With Libraries area
125+ 6. Repeat Steps 2 - 5 until all targets you want to use the SDK with have the SDK linked
126+
127+3. In your Application Delegate:
128+
129+ 1. Import TestFlight -> #import "TestFlight.h"
130+ NOTE: If you do not want to import TestFlight.h in every file you may add the above line into you precompiled header (<projectname>_Prefix.pch) file inside of the
131+
132+ #ifdef __OBJC__ section.
133+ This will give you access to the SDK across all files.
134+ 2. Get your Team Token which you can find at [http://testflightapp.com/dashboard/team/](http://testflightapp.com/dashboard/team/) select the team you are using then choose edit.
135+ 3. Launch TestFlight with your Team Token, if you do not currently use an unhandled exception handler you can skip to step 4
136+
137+ -(BOOL)application:(UIApplication *)application
138+ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
139+ [TestFlight takeOff:@"Insert your Team Token here"];
140+ }
141+
142+ 4. To report crashes to you we install our own unhandled exception handler. If you are not currently using an exception handler of your own then all you need ot do is go to the next step. If you currently use an Exception Handler, or you use another framework that does please go to the section on advanced exception handling.
143+
144+4. To enable the best crash reporting possible we recommend setting the following project build settings in XCode to NO for all targets that you want to have live crash reporting for You can find build settings by opening the Project Navigator (default command+1 or command+shift_j) then clicking on the project you are configuring (usually the first selection in the list) from there you can choose to either change the global project settings or settings on an individual project basis. All settings below are in the Deployment Section.
145+
146+ 1. Deployment Postprocessing
147+ 2. Strip Debug Symbols During Copy
148+ 3. Strip Linked Product
149+
150+4. Use the Checkpoint API to create important checkpoints throughout your application.
151+
152+When a tester passes a level, or adds a new todo item, you can pass a checkpoint. The checkpoint progress is used to provide insight into how your testers are testing your apps. The passed checkpoints are also attached to crashes which can help when creating steps to replicate.
153+
154+[TestFlight passCheckpoint:@"CHECKPOINT_NAME"];
155+Use passCheckpoint: to track when a user performs certain tasks in your application. This can be useful for making sure testers are hitting all parts of your application, as well as tracking which testers are being thorough.
156+
157+5. Using the Feedback API
158+
159+To launch unguided feedback call the openFeedbackView method. We recommend that you call this from a GUI element.
160+
161+ -(IBAction)launchFeedback {
162+ [TestFlight openFeedbackView];
163+ }
164+
165+Once users have submitted feedback from inside of the application you can view it in the feedback area of your build page.
166+
167+6. Upload your build.
168+
169+After you have integrated the SDK into your application you need to upload your build to TestFlight. You can upload from your dashboard or or using the Upload API, full documentation here https://testflightapp.com/api/doc/
170+
171+7. Add Questions to Checkpoints
172+
173+In order to ask a question, you'll need to associate it with a checkpoint. Make sure your checkpoints are initialized by running your app and hitting them all yourself before you start adding questions.
174+
175+There are three question types available: Yes/No, Multiple Choice, and Long Answer.
176+
177+To create questions, visit your build's Questions page, and click on 'Add Question'. If you choose Multiple Choice, you'll need to enter a list of possible answers for your testers to choose from &mdash; otherwise, you'll only need to enter your question's, well, question. If your build has no questions, you can also choose to migrate questions from another build (because seriously &mdash; who wants to do all that typing again)?
178+
179+After restarting your application on an approved device when you pass the checkpoint associated with your questions a Test Flight modal question form will appear on the screen asking the beta tester to answer your question.
180+
181+After you upload a new build to TestFlight you will need to associate questions once again. However if your checkpoints and questions have remained the same you can choose "copy questions from an older build" and choose which build to copy the questions from.
182+
183+8. View your results.
184+
185+As testers install your build and start to test it you will see their session data on the web on the build report page for the build you've uploaded.
186+
187+9. Advanced Exception Handling
188+
189+An unhandled exception means that your application is in an unknown state and there is not much that you can do but try and exit gracefully. Our SDK does its best to get the data we collect in this situation to you while it is crashing but it is designed in such a way that the important act of saving the data occurs in as safe way a way as possible before trying to send anything. If you do use unhandled exception or signal handlers install your handlers before calling takeOff our SDK will then call your handler while ours is running. For example:
190+
191+ /*
192+ My Apps Custom unhandled exception catcher, we do special stuff here, and TestFlight takes care of the rest
193+ **/
194+ void HandleExceptions(NSException *exception) {
195+ NSLog(@"This is where we save the application data during a exception");
196+ // Save application data on crash
197+ }
198+ /*
199+ My Apps Custom signal catcher, we do special stuff here, and TestFlight takes care of the rest
200+ **/
201+ void SignalHandler(int sig) {
202+ NSLog(@"This is where we save the application data during a signal");
203+ // Save application data on crash
204+ }
205+
206+ -(BOOL)application:(UIApplication *)application
207+ didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
208+ // installs HandleExceptions as the Uncaught Exception Handler
209+ NSSetUncaughtExceptionHandler(&HandleExceptions);
210+ // create the signal action structure
211+ struct sigaction newSignalAction;
212+ // intialize the signal action structure
213+ memset(&newSignalAction, 0, sizeof(newSignalAction));
214+ // set SignalHandler as the handler in the signal action structure
215+ newSignalAction.sa_handler = &SignalHandler;
216+ // set SignalHandler as the handlers for SIGABRT, SIGILL and SIGBUS
217+ sigaction(SIGABRT, &newSignalAction, NULL);
218+ sigaction(SIGILL, &newSignalAction, NULL);
219+ sigaction(SIGBUS, &newSignalAction, NULL);
220+ // Call takeOff after install your own unhandled exception and signal handlers
221+ [TestFlight takeOff:@"Insert your Team Token here"];
222+ // continue with your application intialization
223+ }
224+
225+You do not need to add the above code if your application does not use exception handling already.
226+
227+END
228+
229+Please contact us if you have any questions.
230+
231+The TestFlight Team
232+
233+w. http://www.testflightapp.com
234+e. beta@testflightapp.com
235
236=== added file 'TestFlight SDK/TestFlight.h'
237--- TestFlight SDK/TestFlight.h 1970-01-01 00:00:00 +0000
238+++ TestFlight SDK/TestFlight.h 2011-11-05 00:45:27 +0000
239@@ -0,0 +1,35 @@
240+//
241+// TestFlight.h
242+// libTestFlight
243+//
244+// Created by Colin Humber on 8/25/10.
245+// Copyright 2010 23 Divide Apps. All rights reserved.
246+
247+#import <Foundation/Foundation.h>
248+
249+@interface TestFlight : NSObject {
250+
251+}
252+
253+/**
254+ Add custom environment information
255+ If you want to track a user name from your application you can add it here
256+ */
257++ (void)addCustomEnvironmentInformation:(NSString *)information forKey:(NSString*)key;
258+
259+/**
260+ Starts a TestFlight session
261+ */
262++ (void)takeOff:(NSString *)teamToken;
263+
264+/**
265+ Track when a user has passed a checkpoint after the flight has taken off. Eg. passed level 1, posted high score
266+ */
267++ (void)passCheckpoint:(NSString *)checkpointName;
268+
269+/**
270+ Opens a feeback window that is not attached to a checkpoint
271+ */
272++ (void)openFeedbackView;
273+
274+@end
275
276=== added file 'TestFlight SDK/libTestFlight.a'
277Binary files TestFlight SDK/libTestFlight.a 1970-01-01 00:00:00 +0000 and TestFlight SDK/libTestFlight.a 2011-11-05 00:45:27 +0000 differ
278=== added file 'TestFlight SDK/release_notes.txt'
279--- TestFlight SDK/release_notes.txt 1970-01-01 00:00:00 +0000
280+++ TestFlight SDK/release_notes.txt 2011-11-05 00:45:27 +0000
281@@ -0,0 +1,21 @@
282+0.5 - August 19, 2011
283+Feedback that is not attached to a checkpoint [TestFlight openFeedbackView]
284+Usability changes to question views
285+Removed pause and resume sessions, replaced with sessions being stopped and started
286+Added text autocorrection to the Long Answer question type
287+Crash reports now send on crash instead of next launch
288+0.4 - August 15, 2011
289+In Application Feedback with Questions
290+In application updates
291+Custom Environment Information added
292+Networking stack reimplementation
293+Exception handling fixes
294+0.3 - June 15, 2011
295+Removed all mention of JSONKit from the README
296+Added support for using both the Bundle Version and the Bundle Short Version string
297+0.2 - June 14, 2011
298+Removed all categories this allows users to use the SDK without having to set -ObjC and -load_all
299+Prefixed JSONKit for use in TestFlight to remove reported issues where some users were already using JSONKit
300+Added support for armv6 again
301+0.1 - June 11, 2011
302+Initial Version
303\ No newline at end of file
304
305=== modified file 'U1Music-Info.plist'
306--- U1Music-Info.plist 2011-08-03 18:31:39 +0000
307+++ U1Music-Info.plist 2011-11-05 00:45:27 +0000
308@@ -6,8 +6,6 @@
309 <string>English</string>
310 <key>CFBundleDisplayName</key>
311 <string>${PRODUCT_NAME}</string>
312- <key>CFBundleDocumentTypes</key>
313- <array/>
314 <key>CFBundleExecutable</key>
315 <string>${EXECUTABLE_NAME}</string>
316 <key>CFBundleIconFile</key>
317@@ -41,7 +39,7 @@
318 </dict>
319 </array>
320 <key>CFBundleVersion</key>
321- <string>22</string>
322+ <string>26</string>
323 <key>LSRequiresIPhoneOS</key>
324 <false/>
325 <key>NSMainNibFile</key>
326@@ -54,9 +52,5 @@
327 <true/>
328 <key>UIStatusBarStyle</key>
329 <string>UIStatusBarStyleBlackOpaque</string>
330- <key>UTExportedTypeDeclarations</key>
331- <array/>
332- <key>UTImportedTypeDeclarations</key>
333- <array/>
334 </dict>
335 </plist>
336
337=== modified file 'U1Music.xcodeproj/project.pbxproj'
338--- U1Music.xcodeproj/project.pbxproj 2011-08-03 18:24:49 +0000
339+++ U1Music.xcodeproj/project.pbxproj 2011-11-05 00:45:27 +0000
340@@ -47,6 +47,9 @@
341 912D1267134B609700721EE4 /* PlaylistEditViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 912D1266134B609600721EE4 /* PlaylistEditViewController.m */; };
342 912D392213311F2700A443B2 /* AlbumListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 912D392113311F2500A443B2 /* AlbumListViewController.m */; };
343 912D392613311FC600A443B2 /* SongListViewController.m in Sources */ = {isa = PBXBuildFile; fileRef = 912D392513311FC400A443B2 /* SongListViewController.m */; };
344+ 9132827D144E07EA00395F40 /* libTestFlight.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 91328279144E07EA00395F40 /* libTestFlight.a */; };
345+ 9132827E144E07EA00395F40 /* README.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9132827A144E07EA00395F40 /* README.txt */; };
346+ 9132827F144E07EA00395F40 /* release_notes.txt in Resources */ = {isa = PBXBuildFile; fileRef = 9132827B144E07EA00395F40 /* release_notes.txt */; };
347 91406E9413849F2400A7DA67 /* cached.png in Resources */ = {isa = PBXBuildFile; fileRef = 91406E8E13849F2400A7DA67 /* cached.png */; };
348 91406E9513849F2400A7DA67 /* cached@2x.png in Resources */ = {isa = PBXBuildFile; fileRef = 91406E8F13849F2400A7DA67 /* cached@2x.png */; };
349 91406E9613849F2400A7DA67 /* partiallycached.png in Resources */ = {isa = PBXBuildFile; fileRef = 91406E9013849F2400A7DA67 /* partiallycached.png */; };
350@@ -233,6 +236,10 @@
351 912D392113311F2500A443B2 /* AlbumListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; lineEnding = 0; path = AlbumListViewController.m; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.objc; };
352 912D392413311FC400A443B2 /* SongListViewController.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = SongListViewController.h; sourceTree = "<group>"; };
353 912D392513311FC400A443B2 /* SongListViewController.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = SongListViewController.m; sourceTree = "<group>"; };
354+ 91328279144E07EA00395F40 /* libTestFlight.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libTestFlight.a; sourceTree = "<group>"; };
355+ 9132827A144E07EA00395F40 /* README.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = README.txt; sourceTree = "<group>"; };
356+ 9132827B144E07EA00395F40 /* release_notes.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = release_notes.txt; sourceTree = "<group>"; };
357+ 9132827C144E07EA00395F40 /* TestFlight.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TestFlight.h; sourceTree = "<group>"; };
358 91406E8E13849F2400A7DA67 /* cached.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = cached.png; sourceTree = "<group>"; };
359 91406E8F13849F2400A7DA67 /* cached@2x.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = "cached@2x.png"; sourceTree = "<group>"; };
360 91406E9013849F2400A7DA67 /* partiallycached.png */ = {isa = PBXFileReference; lastKnownFileType = image.png; path = partiallycached.png; sourceTree = "<group>"; };
361@@ -455,6 +462,7 @@
362 536D620B1144495400DFCE56 /* SystemConfiguration.framework in Frameworks */,
363 93A54024123188880048BC3D /* Security.framework in Frameworks */,
364 93DFFE3F135D70B60061F29F /* CoreData.framework in Frameworks */,
365+ 9132827D144E07EA00395F40 /* libTestFlight.a in Frameworks */,
366 );
367 runOnlyForDeploymentPostprocessing = 0;
368 };
369@@ -622,6 +630,17 @@
370 name = Parsers;
371 sourceTree = "<group>";
372 };
373+ 91328278144E07EA00395F40 /* TestFlight SDK */ = {
374+ isa = PBXGroup;
375+ children = (
376+ 91328279144E07EA00395F40 /* libTestFlight.a */,
377+ 9132827A144E07EA00395F40 /* README.txt */,
378+ 9132827B144E07EA00395F40 /* release_notes.txt */,
379+ 9132827C144E07EA00395F40 /* TestFlight.h */,
380+ );
381+ path = "TestFlight SDK";
382+ sourceTree = "<group>";
383+ };
384 9316628512264A74003B0EB7 /* Categories */ = {
385 isa = PBXGroup;
386 children = (
387@@ -833,6 +852,7 @@
388 964FA39013CA5BE60018A65B /* Dependencies */ = {
389 isa = PBXGroup;
390 children = (
391+ 91328278144E07EA00395F40 /* TestFlight SDK */,
392 964FA39213CA5C040018A65B /* JSONKit */,
393 964FA39713CA5C040018A65B /* oauthconsumer */,
394 );
395@@ -936,9 +956,10 @@
396 isa = PBXNativeTarget;
397 buildConfigurationList = 1D6058960D05DD3E006BFB54 /* Build configuration list for PBXNativeTarget "U1Music" */;
398 buildPhases = (
399- 1D60588D0D05DD3D006BFB54 /* Resources */,
400 1D60588E0D05DD3D006BFB54 /* Sources */,
401 1D60588F0D05DD3D006BFB54 /* Frameworks */,
402+ 913A54A81450C1310081FD67 /* Run Script */,
403+ 1D60588D0D05DD3D006BFB54 /* Resources */,
404 );
405 buildRules = (
406 );
407@@ -1039,11 +1060,31 @@
408 964FB0C213CB8B0C00D13DC3 /* header_bg.png in Resources */,
409 964FB0C613CB8B6A00D13DC3 /* header_logo@2x.png in Resources */,
410 91DB6B9F13E9C7190029BC77 /* about_logo.png in Resources */,
411+ 9132827E144E07EA00395F40 /* README.txt in Resources */,
412+ 9132827F144E07EA00395F40 /* release_notes.txt in Resources */,
413 );
414 runOnlyForDeploymentPostprocessing = 0;
415 };
416 /* End PBXResourcesBuildPhase section */
417
418+/* Begin PBXShellScriptBuildPhase section */
419+ 913A54A81450C1310081FD67 /* Run Script */ = {
420+ isa = PBXShellScriptBuildPhase;
421+ buildActionMask = 2147483647;
422+ files = (
423+ );
424+ inputPaths = (
425+ );
426+ name = "Run Script";
427+ outputPaths = (
428+ );
429+ runOnlyForDeploymentPostprocessing = 0;
430+ shellPath = /bin/bash;
431+ shellScript = "\nif [ -f ${SRCROOT}/U1TestFlightTeamToken.txt ]\nthen\n\ncp \"${SRCROOT}/U1TestFlightTeamToken.txt\" \"${CODESIGNING_FOLDER_PATH}\"\n\nelse \n\necho \"warning: ${SRCROOT}/U1TestFlightTeamToken.txt does not exist. Create this file and paste the Ubuntu One TestFlight team token into it to enable TestFlight SDK analytics.\"\n\nfi\n\n\n#echo \"foo\" > ${CODESIGNING_FOLDER_PATH}/foo.plist\n";
432+ showEnvVarsInLog = 0;
433+ };
434+/* End PBXShellScriptBuildPhase section */
435+
436 /* Begin PBXSourcesBuildPhase section */
437 1D60588E0D05DD3D006BFB54 /* Sources */ = {
438 isa = PBXSourcesBuildPhase;
439@@ -1153,6 +1194,10 @@
440 isa = XCBuildConfiguration;
441 buildSettings = {
442 ALWAYS_SEARCH_USER_PATHS = NO;
443+ ARCHS = (
444+ armv6,
445+ armv7,
446+ );
447 CODE_SIGN_ENTITLEMENTS = "";
448 CODE_SIGN_IDENTITY = "iPhone Developer";
449 "CODE_SIGN_IDENTITY[sdk=*]" = "iPhone Developer";
450@@ -1163,8 +1208,12 @@
451 GCC_OPTIMIZATION_LEVEL = 0;
452 GCC_PRECOMPILE_PREFIX_HEADER = YES;
453 GCC_PREFIX_HEADER = U1Music_Prefix.pch;
454- GCC_VERSION = "";
455+ GCC_VERSION = com.apple.compilers.llvmgcc42;
456 INFOPLIST_FILE = "U1Music-Info.plist";
457+ LIBRARY_SEARCH_PATHS = (
458+ "$(inherited)",
459+ "\"$(SRCROOT)/TestFlight SDK\"",
460+ );
461 PRODUCT_NAME = "U1 Music";
462 PROVISIONING_PROFILE = "";
463 "PROVISIONING_PROFILE[sdk=*]" = "";
464@@ -1178,6 +1227,10 @@
465 isa = XCBuildConfiguration;
466 buildSettings = {
467 ALWAYS_SEARCH_USER_PATHS = NO;
468+ ARCHS = (
469+ armv6,
470+ armv7,
471+ );
472 CODE_SIGN_ENTITLEMENTS = Entitlements.plist;
473 CODE_SIGN_IDENTITY = "iPhone Distribution";
474 "CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Distribution";
475@@ -1185,9 +1238,13 @@
476 CURRENT_PROJECT_VERSION = 6;
477 GCC_PRECOMPILE_PREFIX_HEADER = YES;
478 GCC_PREFIX_HEADER = U1Music_Prefix.pch;
479- GCC_VERSION = "";
480+ GCC_VERSION = com.apple.compilers.llvmgcc42;
481 INFOPLIST_FILE = "U1Music-Info.plist";
482 IPHONEOS_DEPLOYMENT_TARGET = 4.0;
483+ LIBRARY_SEARCH_PATHS = (
484+ "$(inherited)",
485+ "\"$(SRCROOT)/TestFlight SDK\"",
486+ );
487 PRODUCT_NAME = "U1 Music";
488 PROVISIONING_PROFILE = "";
489 "PROVISIONING_PROFILE[sdk=iphoneos*]" = "";
490
491=== modified file 'U1Music_Prefix.pch'
492--- U1Music_Prefix.pch 2011-07-25 15:56:49 +0000
493+++ U1Music_Prefix.pch 2011-11-05 00:45:27 +0000
494@@ -16,6 +16,7 @@
495 #import "MOC.h"
496 #import "NSManagedObjectContext+Additions.h"
497 #import "SFHFKeychainUtils.h"
498+ #import "TestFlight.h"
499 #define RELEASE_SAFELY(__obj) [__obj release], __obj = nil;
500
501 #define UBUNTU_ONE_SERVICE_NAME @"com.ubuntu.one"
502
503=== modified file 'about_logo.png'
504Binary files about_logo.png 2011-08-03 18:24:10 +0000 and about_logo.png 2011-11-05 00:45:27 +0000 differ
505=== modified file 'controls/AlertPrompt.m'
506--- controls/AlertPrompt.m 2011-04-07 16:08:33 +0000
507+++ controls/AlertPrompt.m 2011-11-05 00:45:27 +0000
508@@ -30,7 +30,7 @@
509 {
510 UITextField *theTextField = [[UITextField alloc] initWithFrame:CGRectMake(12.0, 45.0, 260.0, 25.0)];
511 theTextField.placeholder = placeholder;
512- theTextField.backgroundColor = [UIColor clearColor];
513+ theTextField.backgroundColor = [UIColor whiteColor];
514 theTextField.borderStyle = UITextBorderStyleRoundedRect;
515 [self addSubview:theTextField];
516 self.textField = theTextField;
517
518=== modified file 'models/Album.m'
519--- models/Album.m 2011-06-18 02:04:11 +0000
520+++ models/Album.m 2011-11-05 00:45:27 +0000
521@@ -85,7 +85,7 @@
522
523 NSMutableArray *parameters = [NSMutableArray array];
524 [parameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"id", self.albumId, nil]];
525- NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"getAlbum.view" parameters:parameters];
526+ NSURL *url = [[Subsonic sharedSubsonic] getMetadataURL:@"getAlbum.view" parameters:parameters];
527 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
528
529 AlbumParser *parser = [[AlbumParser alloc] init];
530
531=== modified file 'models/Artist.m'
532--- models/Artist.m 2011-06-18 02:04:11 +0000
533+++ models/Artist.m 2011-11-05 00:45:27 +0000
534@@ -101,7 +101,7 @@
535
536 NSMutableArray *parameters = [NSMutableArray array];
537 [parameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"id", self.artistId, nil]];
538- NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"getMusicDirectory.view" parameters:parameters];
539+ NSURL *url = [[Subsonic sharedSubsonic] getMetadataURL:@"getMusicDirectory.view" parameters:parameters];
540 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
541 ArtistParser *parser = [[ArtistParser alloc] init];
542 parser.artistManagedObjectID = [self objectID];
543
544=== modified file 'models/Playlist.m'
545--- models/Playlist.m 2011-06-18 02:04:11 +0000
546+++ models/Playlist.m 2011-11-05 00:45:27 +0000
547@@ -63,7 +63,7 @@
548
549 NSMutableArray *parameters = [NSMutableArray array];
550 [parameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"id", self.playlistId, nil]];
551- NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"getPlaylist.view" parameters:parameters];
552+ NSURL *url = [[Subsonic sharedSubsonic] getMetadataURL:@"getPlaylist.view" parameters:parameters];
553 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
554
555 PlaylistParser *parser = [[PlaylistParser alloc] init];
556
557=== modified file 'music_29.png'
558Binary files music_29.png 2011-08-03 18:23:53 +0000 and music_29.png 2011-11-05 00:45:27 +0000 differ
559=== modified file 'music_512.png'
560Binary files music_512.png 2011-08-03 18:23:53 +0000 and music_512.png 2011-11-05 00:45:27 +0000 differ
561=== modified file 'music_57.png'
562Binary files music_57.png 2011-08-03 18:23:53 +0000 and music_57.png 2011-11-05 00:45:27 +0000 differ
563=== modified file 'music_57@2x.png'
564Binary files music_57@2x.png 2011-08-03 18:23:53 +0000 and music_57@2x.png 2011-11-05 00:45:27 +0000 differ
565=== modified file 'utilities/Subsonic.h'
566--- utilities/Subsonic.h 2011-06-18 02:04:11 +0000
567+++ utilities/Subsonic.h 2011-11-05 00:45:27 +0000
568@@ -33,7 +33,8 @@
569 }
570 @property BOOL hasCredentials;
571 @property(nonatomic,retain) NSString *credsURL;
572-@property(nonatomic,retain) NSString *defaultURL;
573+@property(nonatomic,retain) NSString *metadataURL;
574+@property(nonatomic,retain) NSString *streamingURL;
575 @property(nonatomic,retain) NSString *defaultUserName;
576 @property(nonatomic,retain) NSString *defaultPassword;
577 @property(nonatomic,retain) NSString *cachedIP;
578@@ -41,9 +42,10 @@
579 @property (readonly, retain) Reachability *reachability;
580 + (Subsonic *)sharedSubsonic;
581 - (NSURL *)getCredsURL;
582-- (NSURL *)getBaseURL:(NSString *)action;
583-- (NSURL *)getBaseURL:(NSString *)action parameters:(NSArray*)extraParameters;
584+- (NSURL *)getMetadataURL:(NSString *)action;
585+- (NSURL *)getMetadataURL:(NSString *)action parameters:(NSArray *)extraParameters;
586 - (NSURL *)getStreamingURLForSongId:(NSString*)songId;
587+- (NSURL *)buildURLWithBase:(NSString *)baseURL action:(NSString *)action parameters:(NSArray *)extraParameters;
588 - (void)removeCredentials;
589 - (void)storeUsername:(NSString*)username password:(NSString*)password;
590 @end
591
592=== modified file 'utilities/Subsonic.m'
593--- utilities/Subsonic.m 2011-08-03 18:25:07 +0000
594+++ utilities/Subsonic.m 2011-11-05 00:45:27 +0000
595@@ -31,7 +31,7 @@
596
597
598 @implementation Subsonic
599-@synthesize credsURL, defaultURL, defaultUserName, defaultPassword, cachedIP, cachedIPHour;
600+@synthesize credsURL, metadataURL, streamingURL, defaultUserName, defaultPassword, cachedIP, cachedIPHour;
601 @synthesize reachability;
602 @dynamic hasCredentials;
603
604@@ -41,9 +41,10 @@
605 {
606 if ((self = [super init]))
607 {
608- self.defaultURL = @"https://streaming.one.ubuntu.com/rest";
609+ self.streamingURL = @"https://streaming.one.ubuntu.com/rest";
610+ self.metadataURL = @"https://one.ubuntu.com/music/api/1.0";
611 self.credsURL = @"https://one.ubuntu.com/phones/creds/ios?scheme=x-ubuntuone-music";
612- self.reachability = [Reachability reachabilityWithHostName:[[NSURL URLWithString:self.defaultURL] host]];
613+ self.reachability = [Reachability reachabilityWithHostName:[[NSURL URLWithString:self.metadataURL] host]];
614 [self.reachability startNotifer];
615 }
616 return self;
617@@ -51,7 +52,8 @@
618
619 - (void)dealloc;
620 {
621- self.defaultURL = nil;
622+ self.metadataURL = nil;
623+ self.streamingURL = nil;
624 self.credsURL = nil;
625 [self.reachability stopNotifer];
626 self.reachability = nil;
627@@ -98,7 +100,7 @@
628 {
629 NSMutableArray *parameters = [NSMutableArray array];
630 [parameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"id", songId, nil]];
631- return [self getBaseURL:@"stream.view" parameters:parameters];
632+ return [self buildURLWithBase:self.streamingURL action:@"stream.view" parameters:parameters];
633 }
634
635 - (NSURL *)getCredsURL
636@@ -106,12 +108,17 @@
637 return [NSURL URLWithString:self.credsURL];
638 }
639
640-- (NSURL *)getBaseURL:(NSString *)action
641-{
642- return [self getBaseURL:action parameters:nil];
643-}
644-
645-- (NSURL *)getBaseURL:(NSString *)action parameters:(NSArray*)extraParameters
646+- (NSURL *)getMetadataURL:(NSString *)action;
647+{
648+ return [self buildURLWithBase:self.metadataURL action:action parameters:nil];
649+}
650+
651+- (NSURL *)getMetadataURL:(NSString *)action parameters:(NSArray *)extraParameters;
652+{
653+ return [self buildURLWithBase:self.metadataURL action:action parameters:extraParameters];
654+}
655+
656+- (NSURL *)buildURLWithBase:(NSString *)baseURL action:(NSString *)action parameters:(NSArray *)extraParameters;
657 {
658 if (self.defaultUserName && self.defaultPassword)
659 {
660@@ -122,7 +129,7 @@
661 [params addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"v", @"1.1.0", nil]];
662 [params addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"c", @"Ubuntu One Music iOS", nil]];
663
664- NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@?%@", self.defaultURL, action, [params urlEncodedString]]];
665+ NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"%@/%@?%@", baseURL, action, [params urlEncodedString]]];
666 return url;
667 }
668 else
669
670=== modified file 'utilities/operations/AlbumArtLoader.m'
671--- utilities/operations/AlbumArtLoader.m 2011-06-21 15:29:37 +0000
672+++ utilities/operations/AlbumArtLoader.m 2011-11-05 00:45:27 +0000
673@@ -134,7 +134,7 @@
674 // Always get the largest we can handle
675 [parameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"size", [NSString stringWithFormat:@"%d", 640], nil]];
676
677- NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"getCoverArt.view" parameters:parameters];
678+ NSURL *url = [[Subsonic sharedSubsonic] getMetadataURL:@"getCoverArt.view" parameters:parameters];
679 return [url absoluteString];
680 }
681
682
683=== modified file 'view_controllers/PlaylistEditViewController.m'
684--- view_controllers/PlaylistEditViewController.m 2011-06-21 17:04:19 +0000
685+++ view_controllers/PlaylistEditViewController.m 2011-11-05 00:45:27 +0000
686@@ -76,7 +76,7 @@
687 {
688 [extraParameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"songId", song.songId, nil]];
689 }
690- NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"createPlaylist.view" parameters:extraParameters];
691+ NSURL *url = [[Subsonic sharedSubsonic] getMetadataURL:@"createPlaylist.view" parameters:extraParameters];
692 NSURLRequest *request = [[[NSURLRequest alloc] initWithURL:url] autorelease];
693 NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
694 [connection start];
695
696=== modified file 'view_controllers/PlaylistViewController.m'
697--- view_controllers/PlaylistViewController.m 2011-06-23 18:40:19 +0000
698+++ view_controllers/PlaylistViewController.m 2011-11-05 00:45:27 +0000
699@@ -250,7 +250,7 @@
700 {
701 NSMutableArray *extraParameters = [NSMutableArray array];
702 [extraParameters addKeyValueObjectFromArray:[NSArray arrayWithObjects:@"id", self.playlist.playlistId, nil]];
703- NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:@"deletePlaylist.view" parameters:extraParameters];
704+ NSURL *url = [[Subsonic sharedSubsonic] getMetadataURL:@"deletePlaylist.view" parameters:extraParameters];
705 NSURLRequest *request = [[[NSURLRequest alloc] initWithURL:url] autorelease];
706 NSURLConnection *connection = [NSURLConnection connectionWithRequest:request delegate:self];
707 [connection start];
708
709=== modified file 'view_controllers/SubsonicTableViewController.m'
710--- view_controllers/SubsonicTableViewController.m 2011-07-12 21:35:15 +0000
711+++ view_controllers/SubsonicTableViewController.m 2011-11-05 00:45:27 +0000
712@@ -270,7 +270,7 @@
713 {
714 NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
715
716- NSURL *url = [[Subsonic sharedSubsonic] getBaseURL:self.viewName];
717+ NSURL *url = [[Subsonic sharedSubsonic] getMetadataURL:self.viewName];
718 NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];
719
720 [xmlParser setDelegate:self.parserDelegate];
721
722=== modified file 'xibs/MainWindow.xib'
723--- xibs/MainWindow.xib 2011-07-25 16:07:02 +0000
724+++ xibs/MainWindow.xib 2011-11-05 00:45:27 +0000
725@@ -1,30 +1,32 @@
726 <?xml version="1.0" encoding="UTF-8"?>
727 <archive type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="7.10">
728 <data>
729- <int key="IBDocument.SystemTarget">1056</int>
730- <string key="IBDocument.SystemVersion">11A511</string>
731- <string key="IBDocument.InterfaceBuilderVersion">907</string>
732- <string key="IBDocument.AppKitVersion">1138</string>
733- <string key="IBDocument.HIToolboxVersion">566.00</string>
734+ <int key="IBDocument.SystemTarget">1280</int>
735+ <string key="IBDocument.SystemVersion">10K549</string>
736+ <string key="IBDocument.InterfaceBuilderVersion">1938</string>
737+ <string key="IBDocument.AppKitVersion">1038.36</string>
738+ <string key="IBDocument.HIToolboxVersion">461.00</string>
739 <object class="NSMutableDictionary" key="IBDocument.PluginVersions">
740 <string key="NS.key.0">com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
741- <string key="NS.object.0">141</string>
742+ <string key="NS.object.0">933</string>
743 </object>
744- <object class="NSMutableArray" key="IBDocument.EditedObjectIDs">
745+ <object class="NSArray" key="IBDocument.IntegratedClassDependencies">
746 <bool key="EncodedWithXMLCoder">YES</bool>
747+ <string>IBProxyObject</string>
748+ <string>IBUITabBarItem</string>
749+ <string>IBUIViewController</string>
750+ <string>IBUICustomObject</string>
751+ <string>IBUITabBarController</string>
752+ <string>IBUIWindow</string>
753+ <string>IBUITabBar</string>
754 </object>
755 <object class="NSArray" key="IBDocument.PluginDependencies">
756 <bool key="EncodedWithXMLCoder">YES</bool>
757 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
758 </object>
759 <object class="NSMutableDictionary" key="IBDocument.Metadata">
760- <bool key="EncodedWithXMLCoder">YES</bool>
761- <object class="NSArray" key="dict.sortedKeys" id="0">
762- <bool key="EncodedWithXMLCoder">YES</bool>
763- </object>
764- <object class="NSMutableArray" key="dict.values">
765- <bool key="EncodedWithXMLCoder">YES</bool>
766- </object>
767+ <string key="NS.key.0">PluginDependencyRecalculationVersion</string>
768+ <integer value="1" key="NS.object.0"/>
769 </object>
770 <object class="NSMutableArray" key="IBDocument.RootObjects" id="1000">
771 <bool key="EncodedWithXMLCoder">YES</bool>
772@@ -40,10 +42,12 @@
773 <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
774 </object>
775 <object class="IBUIWindow" id="380026005">
776- <nil key="NSNextResponder"/>
777+ <reference key="NSNextResponder"/>
778 <int key="NSvFlags">1316</int>
779 <object class="NSPSMatrix" key="NSFrameMatrix"/>
780 <string key="NSFrameSize">{320, 480}</string>
781+ <reference key="NSSuperview"/>
782+ <reference key="NSNextKeyView"/>
783 <object class="NSColor" key="IBUIBackgroundColor">
784 <int key="NSColorSpace">1</int>
785 <bytes key="NSRGB">MSAxIDEAA</bytes>
786@@ -61,22 +65,24 @@
787 <int key="IBUIStatusBarStyle">2</int>
788 </object>
789 <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
790+ <int key="IBUIInterfaceOrientation">1</int>
791 <int key="interfaceOrientation">1</int>
792 </object>
793 <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
794 <bool key="IBUIHorizontal">NO</bool>
795- <object class="IBUIViewController" key="IBUISelectedViewController" id="698427716">
796- <object class="IBUITabBarItem" key="IBUITabBarItem" id="840458441">
797- <string key="IBUITitle">Artists</string>
798+ <object class="IBUIViewController" key="IBUISelectedViewController" id="689134606">
799+ <object class="IBUITabBarItem" key="IBUITabBarItem" id="255674645">
800+ <string key="IBUITitle">Playlists</string>
801 <object class="NSCustomResource" key="IBUIImage">
802 <string key="NSClassName">NSImage</string>
803- <string key="NSResourceName">artists.png</string>
804+ <string key="NSResourceName">playlists.png</string>
805 </object>
806 <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
807 </object>
808 <reference key="IBUIParentViewController" ref="348272196"/>
809 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
810 <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
811+ <int key="IBUIInterfaceOrientation">1</int>
812 <int key="interfaceOrientation">1</int>
813 </object>
814 <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
815@@ -84,7 +90,24 @@
816 </object>
817 <object class="NSMutableArray" key="IBUIViewControllers">
818 <bool key="EncodedWithXMLCoder">YES</bool>
819- <reference ref="698427716"/>
820+ <object class="IBUIViewController" id="698427716">
821+ <object class="IBUITabBarItem" key="IBUITabBarItem" id="840458441">
822+ <string key="IBUITitle">Artists</string>
823+ <object class="NSCustomResource" key="IBUIImage">
824+ <string key="NSClassName">NSImage</string>
825+ <string key="NSResourceName">artists.png</string>
826+ </object>
827+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
828+ </object>
829+ <reference key="IBUIParentViewController" ref="348272196"/>
830+ <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
831+ <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
832+ <int key="IBUIInterfaceOrientation">1</int>
833+ <int key="interfaceOrientation">1</int>
834+ </object>
835+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
836+ <bool key="IBUIHorizontal">NO</bool>
837+ </object>
838 <object class="IBUIViewController" id="639240297">
839 <object class="IBUITabBarItem" key="IBUITabBarItem" id="52392059">
840 <string key="IBUITitle">Albums</string>
841@@ -97,6 +120,7 @@
842 <reference key="IBUIParentViewController" ref="348272196"/>
843 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
844 <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
845+ <int key="IBUIInterfaceOrientation">1</int>
846 <int key="interfaceOrientation">1</int>
847 </object>
848 <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
849@@ -114,28 +138,13 @@
850 <reference key="IBUIParentViewController" ref="348272196"/>
851 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
852 <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
853- <int key="interfaceOrientation">1</int>
854- </object>
855- <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
856- <bool key="IBUIHorizontal">NO</bool>
857- </object>
858- <object class="IBUIViewController" id="689134606">
859- <object class="IBUITabBarItem" key="IBUITabBarItem" id="255674645">
860- <string key="IBUITitle">Playlists</string>
861- <object class="NSCustomResource" key="IBUIImage">
862- <string key="NSClassName">NSImage</string>
863- <string key="NSResourceName">playlists.png</string>
864- </object>
865- <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
866- </object>
867- <reference key="IBUIParentViewController" ref="348272196"/>
868- <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
869- <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
870- <int key="interfaceOrientation">1</int>
871- </object>
872- <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
873- <bool key="IBUIHorizontal">NO</bool>
874- </object>
875+ <int key="IBUIInterfaceOrientation">1</int>
876+ <int key="interfaceOrientation">1</int>
877+ </object>
878+ <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
879+ <bool key="IBUIHorizontal">NO</bool>
880+ </object>
881+ <reference ref="689134606"/>
882 <object class="IBUIViewController" id="621921691">
883 <object class="IBUITabBarItem" key="IBUITabBarItem" id="174212653">
884 <string key="IBUITitle">Settings</string>
885@@ -148,6 +157,7 @@
886 <reference key="IBUIParentViewController" ref="348272196"/>
887 <object class="IBUISimulatedStatusBarMetrics" key="IBUISimulatedStatusBarMetrics"/>
888 <object class="IBUISimulatedOrientationMetrics" key="IBUISimulatedOrientationMetrics">
889+ <int key="IBUIInterfaceOrientation">1</int>
890 <int key="interfaceOrientation">1</int>
891 </object>
892 <string key="targetRuntimeIdentifier">IBCocoaTouchFramework</string>
893@@ -155,9 +165,11 @@
894 </object>
895 </object>
896 <object class="IBUITabBar" key="IBUITabBar" id="252579872">
897- <nil key="NSNextResponder"/>
898+ <reference key="NSNextResponder"/>
899 <int key="NSvFlags">266</int>
900 <string key="NSFrame">{{0, 431}, {320, 49}}</string>
901+ <reference key="NSSuperview"/>
902+ <reference key="NSNextKeyView"/>
903 <object class="NSColor" key="IBUIBackgroundColor">
904 <int key="NSColorSpace">3</int>
905 <bytes key="NSWhite">MCAwAA</bytes>
906@@ -171,6 +183,14 @@
907 <bool key="EncodedWithXMLCoder">YES</bool>
908 <object class="IBConnectionRecord">
909 <object class="IBCocoaTouchOutletConnection" key="connection">
910+ <string key="label">delegate</string>
911+ <reference key="source" ref="841351856"/>
912+ <reference key="destination" ref="664661524"/>
913+ </object>
914+ <int key="connectionID">20</int>
915+ </object>
916+ <object class="IBConnectionRecord">
917+ <object class="IBCocoaTouchOutletConnection" key="connection">
918 <string key="label">window</string>
919 <reference key="source" ref="664661524"/>
920 <reference key="destination" ref="380026005"/>
921@@ -179,14 +199,6 @@
922 </object>
923 <object class="IBConnectionRecord">
924 <object class="IBCocoaTouchOutletConnection" key="connection">
925- <string key="label">delegate</string>
926- <reference key="source" ref="841351856"/>
927- <reference key="destination" ref="664661524"/>
928- </object>
929- <int key="connectionID">20</int>
930- </object>
931- <object class="IBConnectionRecord">
932- <object class="IBCocoaTouchOutletConnection" key="connection">
933 <string key="label">tabBarController</string>
934 <reference key="source" ref="664661524"/>
935 <reference key="destination" ref="348272196"/>
936@@ -207,7 +219,9 @@
937 <bool key="EncodedWithXMLCoder">YES</bool>
938 <object class="IBObjectRecord">
939 <int key="objectID">0</int>
940- <reference key="object" ref="0"/>
941+ <object class="NSArray" key="object" id="0">
942+ <bool key="EncodedWithXMLCoder">YES</bool>
943+ </object>
944 <reference key="children" ref="1000"/>
945 <nil key="parent"/>
946 </object>
947@@ -331,11 +345,11 @@
948 <object class="NSArray" key="dict.sortedKeys">
949 <bool key="EncodedWithXMLCoder">YES</bool>
950 <string>-1.CustomClassName</string>
951+ <string>-1.IBPluginDependency</string>
952 <string>-2.CustomClassName</string>
953+ <string>-2.IBPluginDependency</string>
954 <string>2.IBAttributePlaceholdersKey</string>
955- <string>2.IBEditorWindowLastContentRect</string>
956 <string>2.IBPluginDependency</string>
957- <string>21.IBEditorWindowLastContentRect</string>
958 <string>21.IBPluginDependency</string>
959 <string>22.IBPluginDependency</string>
960 <string>3.CustomClassName</string>
961@@ -354,17 +368,15 @@
962 <object class="NSMutableArray" key="dict.values">
963 <bool key="EncodedWithXMLCoder">YES</bool>
964 <string>UIApplication</string>
965+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
966 <string>UIResponder</string>
967+ <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
968 <object class="NSMutableDictionary">
969 <bool key="EncodedWithXMLCoder">YES</bool>
970 <reference key="dict.sortedKeys" ref="0"/>
971- <object class="NSMutableArray" key="dict.values">
972- <bool key="EncodedWithXMLCoder">YES</bool>
973- </object>
974+ <reference key="dict.values" ref="0"/>
975 </object>
976- <string>{{11, 1059}, {320, 480}}</string>
977 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
978- <string>{{112, 1008}, {320, 480}}</string>
979 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
980 <string>com.apple.InterfaceBuilder.IBCocoaTouchPlugin</string>
981 <string>U1MusicAppDelegate</string>
982@@ -384,17 +396,13 @@
983 <object class="NSMutableDictionary" key="unlocalizedProperties">
984 <bool key="EncodedWithXMLCoder">YES</bool>
985 <reference key="dict.sortedKeys" ref="0"/>
986- <object class="NSMutableArray" key="dict.values">
987- <bool key="EncodedWithXMLCoder">YES</bool>
988- </object>
989+ <reference key="dict.values" ref="0"/>
990 </object>
991 <nil key="activeLocalization"/>
992 <object class="NSMutableDictionary" key="localizations">
993 <bool key="EncodedWithXMLCoder">YES</bool>
994 <reference key="dict.sortedKeys" ref="0"/>
995- <object class="NSMutableArray" key="dict.values">
996- <bool key="EncodedWithXMLCoder">YES</bool>
997- </object>
998+ <reference key="dict.values" ref="0"/>
999 </object>
1000 <nil key="sourceID"/>
1001 <int key="maxID">67</int>
1002@@ -402,16 +410,11 @@
1003 <object class="IBClassDescriber" key="IBDocument.Classes"/>
1004 <int key="IBDocument.localizationMode">0</int>
1005 <string key="IBDocument.TargetRuntimeIdentifier">IBCocoaTouchFramework</string>
1006- <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDependencyDefaults">
1007- <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.iPhoneOS</string>
1008- <integer value="1056" key="NS.object.0"/>
1009- </object>
1010 <object class="NSMutableDictionary" key="IBDocument.PluginDeclaredDevelopmentDependencies">
1011 <string key="NS.key.0">com.apple.InterfaceBuilder.CocoaTouchPlugin.InterfaceBuilder3</string>
1012 <integer value="3100" key="NS.object.0"/>
1013 </object>
1014 <bool key="IBDocument.PluginDeclaredDependenciesTrackSystemTargetVersion">YES</bool>
1015- <nil key="IBDocument.LastKnownRelativeProjectPath"/>
1016 <int key="IBDocument.defaultPropertyAccessControl">3</int>
1017 <object class="NSMutableDictionary" key="IBDocument.LastKnownImageSizes">
1018 <bool key="EncodedWithXMLCoder">YES</bool>
1019@@ -432,6 +435,6 @@
1020 <string>{30, 30}</string>
1021 </object>
1022 </object>
1023- <string key="IBCocoaTouchPluginVersion">141</string>
1024+ <string key="IBCocoaTouchPluginVersion">933</string>
1025 </data>
1026 </archive>

Subscribers

People subscribed via source and target branches