By Developers, For Developers

Historical errata for iOS 9 SDK Development

PDF PgPaper PgTypeDescriptionFixed onComments
28TYPO

You wrote “iPad Air 2” instead of “iPad mini” in the following sentence:

The results pane shows that we got back 138.1 for the “iPhone 6” key and nil for the “iPad Air 2” key, which makes sense because we never gave sizeInMM a value for that key.

2015-12-06
31TYPO

In section “switch Statements”

“This switch will log ”That’s what I want" if model is “iPhone 6s”, or “Have they even released that?” if it’s “iPhone 7”, or “Not my thing” in all other cases."
—> The string in the case statement is “iPhone 6 plus”, not “iPhone 6s”

2015-12-06
2820ERROR

On the Counting With Numeric Types section, we are faced with changing a variable data type from Integer to Float. The following paragraph states an error description which we should receive:

Oh no! We get another error, and this time without an instant fix. Worse yet, the description is unhelpful: ““Expected member name following ’.’””

However, when running the code, we actually receive the following error:

“Cannot assign a value of type ‘Double’ to a value of type ‘Int’.”

2015-12-06
42TYPO

“The playground will stop the audio after 30 seconds”.
Not on my machine. The audio just keeps on playing until I close the playground or press the “stop” button (square shaped).
Maybe a newer Version of Xcode/Swift changed that behavior?

At the bottom of my Xcode window there is not “30 second play thing”. I only see a “play button” with options:

- Automatically Run
- Manually Run

I’m not aware, that I changed the configuration of this. But maybe it’s a setting in Xcode’s Playgrounds, that is configurable?

2015-12-10
50TYPO

There is a superfluous semicolon.

I think
case: None;
was meant to be
case: None

2015-12-06
13ERROR

XCode’s preferences is at Xcode -> Preferences, not File -> Preferences

2015-12-06
51ERROR

The error message Xcode gives when you assign 0.5 to `bar` has been improved. Now it’s “Cannot assign value of type ‘Double’ to type ‘Int’”.

2015-12-06
52ERROR

The error message “‘Int’ is not convertible to ’Double’” has also been changed. Now it’s “Cannot convert value of type ‘Int’ to specified type ‘Double’”

2015-12-06
8SUGGEST

XCPSetExecutionShouldContinueIndefinitely(true) appears to have been deprecated. Xcode 7.1 recommends XCPlaygroundPage.needsIndefiniteExecution(true) instead.

2015-12-06
32OK

Paragraph:This evaluates to the single character ““éé.”” Two characters go in, and one
comes out
Should perhaps be:
This evaluates to the single character “é.” Two characters go in, and one
comes out

(Doubled up accented e & quotes)

2015-12-10Production system problem, not in the book's source files.
6355OK

In this page we are guided to mangle with the URL scheme. However, changing the URL scheme in the given block with an `if let myURL …` fails and does not go into the error handling block and therefore making it impossible to see the error message caught by the `do catch` block.

It’d be good to show the code that allows the reader to see the error.

2015-12-10If you truly mangle the entire URL, yes, you'll get stopped at the "if let". OTOH, if you mangle only the scheme (as suggested by the book: change "http:" to "foo:"), then you will indeed end up in the catch, which is what logs "NSError: Error Domain=NSCocoaErrorDomain Code=256 "The file couldn’t be opened." UserInfo={NSURL=foo://pragprog.com}"
10598TYPO

In the Joe asks section, `Twitter’s SSH` should be `Twitter’s SSL`

2015-12-06
65ERROR

The passage says if we wanted to be able to add other types to the array we should declare it as Array but surely it should be Array to be able to add other types?

2015-12-06
250248OK

On the Applying Filters section, the code that is provided to apply the Pixellated filter raises the following log on the console.

CreateWrappedSurface() failed for a dataprovider-backed CGImageRef.

and does not apply the filter. I have not been able to resolve this issue.

2015-12-07The "CreateWrappedSurface() failed for a dataprovider-backed CGImageRef" is a harmless error that is apparently printed to the debugger whenever we touch Core Image in the simulator. \n \nUsing the sample code for this chapter, I was able to post two tweets with the Core Image pixellation effect successfully applied: \n \nSuourland photo from default Photos collection: https://twitter.com/pragsiostest/status/673639366401597440 \nJanie's Twitter avatar: https://twitter.com/pragsiostest/status/673639275884322816
39TYPO

2nd para says: “We have a couple of optionals.”

“optionals” probably intended to be “options”.

2015-12-06
156ERROR

While walking the jsonArray of tweets, we’re using “profile_image_url” as the key to get the avatarURLString, but that string is for an unsecure HTTP URL; when I ran it, all the avatar images were blank. Changing the key to “profile_image_url_https” fixed the problem.

Note that I didn’t have to add the ATS exception settings on PDF page 96; presumably Twitter has fixed whatever their problem was.

2015-12-06
24ERROR

Bottom of p24, onto p25: “If we wanted to be able to add other types, like any of the numeric types, we would have had to originally declare that models accepts any type of object, which we would write as var models : Array.”

Maybe technical, maybe typo: declaring models of type Array doesn’t seem to say that models accepts any type of object. Indeed, following that line with models.insert(0, atIndex: 0) produces an error.

2015-12-06
66TYPO

2nd para, after the screenshot. There is no “LaunchScreen.xib”, the screenshot (and in an actual Xcode 7.1.1 project) the project contains “LaunchScreen.storyboard”.

Also 2nd para, there is no “Supporting Files” group in the screenshot, or in my actual project. Perhaps the “Products” group was intended?

2015-12-06
199ERROR

TweetDetailViewController.prepareForSegue() checks for the segue identifier “showUserDetailSegue” (note that Detail is singular here); however, back on PDF page 196, we set the segue’s identifier to “showUserDetailsSegue” (note that Details is plural here).

2015-12-06
23OK

This evaluates to the single character ““éé.””

The " and é are duplicated.

2015-12-10Production system problem, not in the book's source files.
27SUGGEST

In the example at the top of the page, “string sets” are declared as such explicitly using:

var iPhoneSet : Set = [“iPhone 6”]

Swift will infer the type of the set . Perhaps you could add a note if you consider explicitly declaring the type is better practice than letting Swift infer it.

2015-12-06
95SUGGEST

While some discussion of ATS may be useful, Twitter has updated its certs since B2.0. `nscurl —ats-diagnostics ` now fully passes. Given that the approach was to disable ATS (vs. a more specific guard), I’ll recommend that the entire ATS section be removed. New developers who hit a situation like this could certainly use an ATS tutorial, that would be a major tangent at this point in the material.

2015-12-06
3628TYPO

“sizeInMm[”iPhone 6“] sizeInMm[”iPad mini“]
The results pane shows that we got back 138.1 for the ”iPhone 6" key and nil for the “iPad Air 2” key, which makes sense because we never gave sizeInMM a value for that key."

Correction: “iPad Air 2” should be “iPad mini”
Correction: sizeInMM should be sizeInMm for consistency

2015-12-06
7TYPO

Apple Radio should be Apple Music (in green sidebar)

2015-12-06
87TYPO

The text wasn’t very clear. It reads:

The difference a frame’s bounds and frame is that the bounds values are in the view’s own coordinate system, while the frame is in its superview’s coordinate system.

Should possibly read:

The difference between a frame’s bounds and frame is that the bounds values are in the view’s own coordinate system, while the frame is in its superview’s coordinate system.

2015-12-06
42ERROR

XCPSetExecutionShouldContinueIndefinitely(true) gives a warning message that XCPSetExecutionShouldContinueIndefinitely() has been deprecated and to set XCPlaygroundPage.needsIndefiniteExecution instead.

2015-12-06
155TYPO

…we had used the NSJSONSerialization to convert the raw JSON (as an NSData) into an collection.

should be

…we had used the NSJSONSerialization to convert the raw JSON (as an NSData) into a collection.

2015-12-06
165TYPO

Wrong queue is mentioned. The text says: “The big change is inside the closure that runs on the main queue.” The check that was added is actually happening on the QOS_CLASS_DEFAULT queue.

2015-12-06
172TYPO

Text and image don’t match. The text states: “Then do the same thing to create a group called Twitter Utilities,…” however the included image shows the group as “Twitter Classes”

2015-12-06
173TYPO

Continuing from the pg 172 errata with the use of “Twitter Classes” and “Twitter Utilities”… One paragraph mentions the “Twitter Classes” group. Then in the Creating a sendTwitterRequest Function section, it again says “With the Twitter Utilities groups selected…”

The group used should be consistent.

2015-12-06
192ERROR

The NSLog statement in the guard block when testing tweetDict = jsonObject as? [String : AnyObject] states “handleTwitterData() didn’t get an array”. It should state “”handleTwitterData() didn’t get a dictionary" since we are testing for a dictionary, and not an array here.

2015-12-06
192ERROR

Similar to errata #79217, we should be using profile_image_url_https to make ATS happier.

2015-12-06
198ERROR

Same as errata #79277.

The NSLog statement in the guard block when testing tweetDict = jsonObject as? [String : AnyObject] states “handleTwitterData() didn’t get an array”. It should state “handleTwitterData() didn’t get a dictionary” since we are testing for a dictionary, and not an array here.

2015-12-06
39ERROR

var name : String?
var screenHeight?
var screenWidth?

Double type has been removed. It should be instead:

var name : String?
var screenHeight : Double?
var screenWidth : Double?

2015-12-06
40TYPO

“The three properties we’ve added to our class are stored properties, meaning that Swift creates the in-memory storage for the String and the two Ints”

They were like Ints on an initial version. However, on latest version, these are Doubles

2015-12-06
258ERROR

application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) is deprecated in iOS 9.0. Should be using application:openURL:options instead.

2015-12-10
267ERROR

After we remove the NSExtensionPrincipalClass item from the plist, there is no text that tells you to add the NSExtensionMainStoryboard to the plist, just the picture.

2015-12-10
268ERROR

The text states that we should include the `TwitterAPIRequest` and `TwitterAPIRequestDelegate` classes from the files we created earlier. Searching the project there are no such classes or files created, only the TwitterAPIRequestUtilities file which contains the `sendTwitterRequest` function.

2015-12-10
53OK

Wouldn’t it better to define:

var optionalString : String? = “iPhone6”, instead of:
let optionalString : String? = “iPhone6”

and suggest reader to remove the assignment to test the two enum values?

2016-02-07Fair enough, but this is just an aside, not something the reader needs to actually run and play around with in their playground.
62OK

extra space between Xcode and 7 in “Xcode 7” right below “The Xcode Window”. Let us know if you prefer us not to be that picky :)

2016-02-07Production quirk: that's a non-breaking spaced added by the editor or copy-editor.
66TYPO

“For the view-based app, we get two source code files in the PragmaticTweets group, along with a Main.storyboard, a LaunchScreen.storyboard, and an Images.xcassets.”

There is no “Images.xcassets” file in the project. It is also not visible on the screen capture that’s shown on the page.

2016-02-07
66ERROR

“The files in the Supporting Files group help build and run our app, but we won’t need to edit them directly”. There is no Supporting Files group in the project, and it’s not displayed either in the screenshot attached in same page number

2016-02-07
22ERROR

The character viewer does not seem to be available along longer. A little Googling showed that it’s Ctrl+Cmd+Space to show the extended characters now in El Capitan. It has a different UI so the screenshot on this page is no longer correct as well.

2016-02-07
46TYPO

This is kind of a technical error as well. You state that Shift+Cmd+C will display the console area. That’s correct, but it’s not available in the playground. Instead, I have to use Shift+Cmd+Y to Show Debug Area.

2016-02-07
49SUGGEST

When you show `var description`’s implementation you omit the `get {}`. A little experimentation on my end showed that `get { }` appears to be optional when only creating a getter for computed properties. I’m not sure if there’s a convention (i.e., read-only are supposed to only return) or not, but it caught my attention. This is the second time I’ve come across this so far in the book.

2016-02-07
48TYPO

“9,252.7” is not what’s rendered for me — it’s 9252.699999999999

2016-02-07
56SUGGEST

Throughout the book I’ve noticed both `foo: SomeType` and `bar : SomeType`. Is there a convention for where spaces go around the colon? If there is, it’d be nice to have a sidebar or some such explaining what goes where. I have seen one reading through Part 1.

2016-02-08I asked on Twitter and got votes for both. Drag-and-dropping connections with storyboards creates vars without the space after the name, so I guess we'll adopt that as a convention for now.
66TYPO

It says `Images.xcassets` when the screenshot and actual project has it named `Assets.xcassets`

2016-02-07
80ERROR

If we selected UIButton instead of default AnyObject, the method should be:
@IBAction func handleTweetButtonTapped(sender: UIButton) { }

2016-02-07
92TYPO

“This line one line of code is doing a bunch of things”. You could suppress first “line”

2016-02-07
82SUGGEST

The lack of `import Social` threw me for a loop. I started writing the code out, then saw an error in Xcode as it started analyzing what I was writing. I thought it might be a missing import, so I typed `import S` and the Social framework came up. After I fixed that I read the sidebar and realized what was happening. Totally a bike-shed comment, but having a warning in the text before the code would help people like me who see an error and automatically try to fix it before reading on.

2016-02-07That's what the "Getting in Trouble on Purpose" sidebar is there to explain. We'll try to move it up before the code so you have an advance warning.
115ERROR

“all the handleTweetButtonTapped() class does” -> “all the handleTweetButtonTapped() method does”

2016-02-07
142TYPO

When we “pull to refresh”, according to the example, we are adding a new tweet to the array. However, in an older version of the document, the author might have an example integrating with the twitter API, and displaying someone’s followers tweets. That’s why it says:
“If we’re not following enough people for the reload to be obvious, we can temporarily comment out the reloadTweets() in viewDidLoad, so we’ll have to pull to refresh when the app loads in order to see any tweets at all.”
This should be updated to current example, where as i said, we’re just adding a new tweet to the list.

2016-02-07
89TYPO

This says that it should be –16 if Constrain to Margins is checked. It shows up as –20 for me.

2016-02-07I think it changed in Xcode 7.1 or 7.2. Jonny Ive loves his whitespace. Will fix to -20 for next edition.
103ERROR

According to the code inlined, there should be an XCTAssert(true, “pass”) in the generated code. That’s not in my version. It’s simply an empty function.

2016-02-07
116DEFER

Would be really nice to see an example of using XCTestExpectation here in addition to using sleep. Sleeping two seconds over the course of an application that has dozens of interactions that we want to verify would me adding minutes to the test runtime I think. Maybe it doesn’t? If not, explaining that would be really helpful to folks like me who are used to single-threaded tests. If not the full example, maybe include a sentence or two with how to “fix” the test by moving over to async testing and the protocols and such to look up to make it work.

2016-02-07A practical concern, but will have to wait for next edition.
119ERROR

I went thru the generation of the code signing key, got my team, and was able to build the app. It installed onto the device, but when it installed I got an error from Xcode titled `Could not launch “PragmaticTweets”` with the following text: `process launch failed: Security`. I went to Settings > Device Management and trusted my account which fixed the issue.

2016-02-07
119ERROR

I went thru the generation of the code signing key, got my team, and was able to build the app. It installed onto the device, but when it installed I got an error from Xcode titled `Could not launch “PragmaticTweets”` with the following text: `process launch failed: Security`. I went to Settings > Device Management and trusted my account which fixed the issue.

2016-02-07
138OK

I ran into the issue described in the warning prior to reading it. I ended up Ctrl+clicking the items in the tree view under View Controller Scene and using those to ensure I had the correct items when I dropped them in. Might be worth mentioning that as an option here too.

2016-02-08Not sure what to do here: is it just that the page break happens to separate the warning from the code listing?
139OK

FWIW, the avatars I get have the Twitter blue background, not the burgundy one.

2016-02-07Try varying the number in the URL after "default_profile_". This comes up as burgundy for me: \n \nhttps://abs.twimg.com/sticky/default_profile_images/default_profile_6_200x200.png
172SUGGEST

Xcode provides a way to automatically create a group from a selection of files instead of the manual option explained here. I think it’s worth mentioning, but that’s just a suggestion :)

2016-02-08
197TYPO

“or the view’s lower title bar” -> I think it’s the one on top of the view in Xcode 7 at least, although i think it was on the bottom in some previous versions

2016-02-07
208TYPO

“So there should be two: the navigation controller that’s in front of our RootViewController, and the TweetDetailViewController.”.

I guess this requires some paraphrase, as: “So there should be two navigation controllers: those in front of our RootViewController, and TweetDetailViewController respectively.”.

it’s just a suggestion, but the splitViewController is definitely not managing the TweetDetailViewController

2016-02-10
193ERROR

instead of using the media_url, probably it’s better to use media_url_https, specially with iOS 9, you know… :)

2016-02-08
239SUGGEST

“Our approach of loading the image data from the NSURL right when the tableView(cellForRowAtIndexPath:) needs it means that everything in our app just stops while we load that image from the network.”
Suggestion: Add a comma after “needs” to prevent from reading “needs it means”
“Our approach of loading the image data from the NSURL right when the tableView(cellForRowAtIndexPath:) needs it, means that everything in our app just stops while we load that image from the network.”

2016-02-07
186SUGGEST

“The main attributes we can edit are the Identifier string and the segue type.”
I’d suggest changing the reference from “type” to “kind” to match the language used in Xcode.

2016-02-07
126TYPO

“all of the handleShowMyTweetsButton- Tapped() method that populated it”

That isn’t an actual method name (well, at least from the B2.0 code…) that was in ViewController. The relevant methods I see are: handleTweetButtonTapped, handleShowMyTweetsTapped, and maybe reloadTweets (which is the only one that directly references the offending/removed twitterWebView).

Unless I’m just getting caught with a B2.0 -> B3.0 change up, that may confuse a less experienced programming student.

2016-02-07
213ERROR

Code change suggested on pages 209 - 213 (PDF version) to handle both iPhone and iPad breaks the iPad Air 2 portrait mode. With this code the iPad Air 2 (simulator) in portrait mode starts up showing a not filled in tweet detail, and there is no way to navigate to the tweet list. To be an example of a recommended way to handle different screen sizes this needs to be addressed. (I have verified this both with my code, and with the downloaded zip file with code (12-2 and 12-3 in downloaded zip file.)

(I am running OS X 10.11.2 and xcode 7.2.)

2016-02-10
136SUGGEST

AFAICT, how to set a “trailing space constraint” is never detailed anywhere in pragios9. That’s again going to be tricky for newcomers, since the naive approach of clicking on the label then clicking on the Align button leaves the “Trailing Edges” option greyed out. I click on the label, then Command-click on the parent “Content View” in the scene sidebar to enable trailing edge alignment between the correct entities. There may be a more efficient way, but it probably needs explanation or it’s going to leave folks wandering around the Xcode UI for ages.

2016-02-07Our first use of a leading/trailing constraint was back when we had the web view. I'll add the term there, and a reminder here.
153ERROR

I get an error on `println` saying that it’s been renamed to `print`. The program won’t compile until I changed it (it makes the recommendation for me).

2016-02-07Oops, that should be NSLog() anyways. print/println are more primitive.
20TYPO

In the example, we explicitly define the type of `bar` to be a Double. The sentence following the code says “we’ve explicitly declared that we want foo to be a Double”. It should say “bar” instead of “foo”.

2016-02-07
52SUGGEST

The return statement in the example wraps the string in parenthesis, which are not needed and not consistent with return statements in previous examples.

return (“\\(name): \\(screenDescription)”)

2016-02-07
70ERROR

In the description of the sizing popover in IB on page 68, I understood the text to say that I should choose Compact Width. On page 69, when dragging the button to the view it says “Drag the button … into the iPhone-sized view in IB” which also makes me think the view should be Compact Width. The screenshot of IB on page 70 shows a size of Any. When I run the project (having used Compact Width to layout the elements) the button and label are not off screen as shown in the second screenshot on page 70.

I believe the correction would be to have the reader layout the elements with a size of Any.

2016-02-07
148ERROR

In the Making a Twitter API Request section, you mention using both statuses/home_timeline and statuses/user_timeline. Which one should it be?

2016-02-07
193SUGGEST

When loading the image for a tweet, all of the tweets I tested with used http instead of https. This prevented the images from being shown. I ended up adding “Allow Arbitrary Loads” in the Info.plist to allow these images to be viewed.

2016-02-08
20TYPO

You reference bar up the code sample:

var bar : Double = 0

but call it foo in the description underneath.

2016-02-07
350TYPO

In the chapter ‘Digging into Documentation’ There is a reference to a guide called ‘Audio & Video Starting Point’ which we are to open. It does not exist or I can not find it. My documentation downloads is up to date and checked.

I’m using Xcode 7.3 (beta4) 7D152p

2016-06-04
77TYPO

2 x ‘the’

“As our array grows, it likely won’t fit on one line of the results pane. Fortunately, there’s a way to see the whole thing.
>Mouse over the the last line <
in the results pane, and two icons will appear on the far right: Quick Look and Preview.

Click the rightmost button, Preview”

Excerpt From: Chris Adamson with Janie Clayton. “iOS 9 SDK Development (for SpaceShipDev).” iBooks.

2016-06-04
97TYPO

OptionalsPlayground final code example.

if let size6 = size6 where size6 > 100.0 {
size6 >> Should this not be size6.dynamicType ? <<
}

2016-06-04
99SUGGEST

Grammer ?

“What We’ve Learned
Optionals are tricky subject to get your head around, so it’s probably a good time to take a break and take stock of what we’ve learned so far.”

Consider: “Optionals are a tricky subject”

2016-06-04
54TYPO

In Chapter 3. Swift with Style • 54… typo …

“of recovering or telling the user what happend”

“of recovering or telling the user what happened”

2016-06-04
111/1TYPO

At the end of page 111, the text says “self.reloadTweets() to the viewDidLoad()”

but the example at the start of page 112 just says reloadTweets()

Confirmed the link to the code from “testing/PragmaticTweets-6-1/PragmaticTweets/ViewController.swift” has only the latter.

Confirmed either work though :)

2016-06-04
22OK

The book describes the ability to use unicode characters. an emoji in this case, as a var name. When I tried this I got an error saying Postfix ‘=’ is reserved.

2016-06-04Are you sure you're creating your emoji from the Edit -> Emoji & Symbols menu (or, if you've enabled it in system preferences, the input menu)? \n \nSwift also wants you to have consistent spacing on both sides of the "="; use a space on both sides or neither. Screenshot here: https://twitter.com/invalidname/status/739086663624871936
48TYPO

In the last sentence: “The fact that we write the code an extension…” Should have “… code in an extension…”

2016-06-04
41TYPO

At the very end of the page is the following sentence:
“The results pane shows that we got back 138.1 for the ”iPhone 6s" key and nil for the “iPad mini” key, which makes sense because sizeInMM doesn’t have that key."

However, the set we are working with is named “sizeInMm” rather than “sizeInMM”.

2016-06-04
10391TYPO

The last paragraph on the page includes a sentence that begins “We’ve used [http url with www] here…”, but the URL used in the code above is actually [https url without www].

(The errata form wouldn’t let me include the actual URLs even though they appear in the book.)

2016-06-04
10TYPO

I am on XCode 7.3 and I dont see the “Audio & Video starting point” under Guides. I am trying to attach a screenshot of what I see, but evidently links aren’t allowed, so here is list of guides I see :

  • Accessing Audio files in Asset catalogs
  • AirPlay Overview
  • Audio Interruptions during Movie Playback
2016-06-04
226ERROR

The pair of equations for the affine transformation matrix are incorrect; they should be:

x’ = ax + cy + tx
y’ = bx + dy +ty

2016-06-04
153ERROR

“The code tag should not be here.” sounds like an editing comment, not like content addressing the reader.
Also referencing “Let’s go back to our handleTwitterData() method, specifically the if block that called NSJSONSerialization.JSONObjectWithData” - there is a do-catch but no if in the source (PragmaticTweets-8-1).

2016-06-04
167TYPO

can be spilt out -> can be split out

2016-06-04
196SUGGEST

The second paragraph for “Exit Segues” states that the method signature should “have return type IBAction”, later the text says “have the @IBAction annotation”. I think the latter is much better than the first one, I would not consider the annotation being an return type like maybe in Objective-C. A return type in Swift would be annotated later with “->”.

2016-07-09
204SUGGEST

I am not 100% sure, but I think at the end of the page in parentheses the following should be negated “(since we don’t need to do any of this if we’re in a split-view scenario)”. I think we ONLY need to do any of this if we’re in a split-view scenario (or we don’t need to do … unless we’re in …).

2016-07-09
270TYPO

Librar -> Library in “From the Framework & Librar group,”

2016-07-09
296TYPO

testingemdash;but (in first sentence of “Archiving”)

2016-07-09
297ERROR

Archive is in the Product menu of XCode (not File), so “File > Archive” should be “Product > Archive”

2016-07-09
95TYPO

In the first paragraph, the last sentence is “As of this writing, Twitter’s SSH support isn’t forward-secrecy compliant.” It should be “As of this writing, Twitter’s SSL support isn’t forward-secrecy compliant.”

8ERROR

When I attempt to execute the code on page 6 with the additions on page 8, I get this error message listed on bottom. I think that this URL is no longer valid. If replaced by something like “… mp3.fr.armitunes.com:8000/listen.pls” (from the webpage), the code works.

2016-07-25 07:57:49.225 MyPlayground[23793:3155663] Failed to obtain sandbox extension for path=/var/folders/6n/6b3n1l7n3q19vkn2m765fc7r0000gn/T/com.apple.dt.Xcode.pg/containers/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-CA217213-6208-442C-9CA2-74493B1B5F1F/Library/Caches/com.apple.dt.playground.stub.iOS_Simulator.MyPlayground-CA217213-6208-442C-9CA2-74493B1B5F1F. Errno:1

193ERROR

When the auto layout constraints for the stack view are described, it says to give it a top constraint of 0 to the superview. This causes the top of the stack panel to overlap with the status bar on the phone. This should be 0 to the top layout guide. Note that the sample project sets this correctly (and is how i found out what to set it to).

318TYPO

Within the “Implementing the Next Keyboard Button” section. I believe “KeyboardViewControllerStoryboard.storyboard” should be “PragmaticTweepsKeyboard.storyboard”.

Also, what good does an ePub page number get you?

2425SUGGEST

The digging into Documentation section is based on the IOS 9.0 Documentation which is too far from the curent documentation and does not seem accessible from the Xcode Documentation.

6ERROR

I am using Xcode 8.1 and was working on the very first example. I’m assuming this is due to iOS 10.

let url = NSURL (string: "xxxx://wwwDOTpublicbroadcastingDOTnet/wgvu/ppr/wgvufm.m3u")
let player = AVPlayer(URL: url!)

Generated the error message “NSURL” is not implicitly convertible to “URL”; did you mean to use “as” to explicitly convert?"

Searching around stackoverflow, I have adjusted the code to use URL rather than NSURL and lowercase url in the AVPlayer . It now appears to work as follows:

let url = URL (string: "xxxx://wwwDOTpublicbroadcastingDOTnet/wgvu/ppr/wgvufm.m3u")
let player = AVPlayer(url: url! )// as URL)

Categories: