Skip to content →

Month: November 2014

UIDocumentInteractionController vs UIActivityViewController

When I first released WebPDF, I used an UIActivityViewController to share the PDF. This only gave me a few apps to share to. I expected to see other apps that supported PDFs. Here is the code I used:

NSString* fileName = [NSString stringWithFormat:@"%@.pdf", 
  [self.detailItem valueForKey:@"pdfFilename"]];
NSString* filePath = [WebPDFUtils pathWithFilename:fileName];
NSArray *activityItems = @[[NSURL fileURLWithPath:filePath]];
    
UIActivityViewController *activityViewController = 
  [[UIActivityViewController alloc] initWithActivityItems:activityItems 
                                    applicationActivities:nil];
activityViewController.popoverPresentationController.barButtonItem = _shareButton;
    
[activityViewController setCompletionHandler:^(NSString *activityType, BOOL completed) {
  [self dismissViewControllerAnimated:YES completion:nil];
}];
    
[self presentViewController:activityViewController
                   animated:YES
                 completion:nil];

Here is what the share sheet looked like:
UIActivityViewController

After searching around I found the UIDocumentInteractionController. I updated my code:

NSString* fileName = [NSString stringWithFormat:@"%@.pdf", 
  [self.detailItem valueForKey:@"pdfFilename"]];
NSString* filePath = [WebPDFUtils pathWithFilename:fileName];
self.documentInteractionController = [UIDocumentInteractionController 
  interactionControllerWithURL:[NSURL fileURLWithPath:filePath]];
self.documentInteractionController.delegate = self;
self.documentInteractionController.UTI = @"com.adobe.pdf";
[self.documentInteractionController presentOptionsMenuFromBarButtonItem:sender 
                                                               animated:YES];

Here is what the share sheet looked like:
UIDocumentInteractionController

When should you use a UIActivityViewController vs a UIDocumentInteractionController. You should really read the Developer docs:

UIActivityViewController

The UIActivityViewController class is a standard view controller that you can use to offer various services from your application. The system provides several standard services, such as copying items to the pasteboard, posting content to social media sites, sending items via email or SMS, and more. Apps can also define custom services.

UIDocumentInteractionController

A document interaction controller, along with a delegate object, provides in-app support for managing user interactions with files in the local system. For example, an email program might use this class to allow the user to preview attachments and open them in other apps. Use this class to present an appropriate user interface for previewing, opening, copying, or printing a specified file.

In general if you’re sharing an image or url, you might want to use a UIActivityViewController. If you’re sharing a document, you might want to use a UIDocumentInteractionController.

Comments closed

WebPDF 1.1.0

me_icon
WebPDF has been updated to include support for saving a PDF from Safari.

In Safari, choose the share icon. Then tap on WebPDF. The page is saved as a PDF to WebPDF.

Source is available on GitHUB: https://github.com/dougdiego/WebPDF

Comments closed

WebPDF 1.0.0

me_icon
I needed an application that could create a PDF out of a webpage. I found a few apps on the AppStore, but none of them met my needs. I figured it would be a fun project and created WebPDF.

It’s a simple application that creates PDF’s out of webpages. The app saves the PDF, lets you view it and export it. It’s optimized for all iPhones (including the iPhone 6 and iPhone 6+) and the iPad.

I also made the source available on GitHUB: https://github.com/dougdiego/WebPDF

Comments closed

Serfas Thunderbolt USB Taillight Warranty

serfasThunderbolt I previous wrote about how much I liked the  Serfas Thunderbolt USB Taillight. Well now I have even more reason to like it.  A couple of weeks ago, a plastic piece inside the USB connector broke off.  This is the same plastic piece you see on all female mini USB connectors.  I think this is bad design on USB’s part, not Serfas.  I assume it broke because of the almost daily plugging in to be recharged.

I was about to order a new one, but decided to check out their warranty page: Serfas Warranty  I emailed their warranty email address about my problem and got a response within 30 minutes.  They said to mail it in and they would fix or replace it.

I mailed it in and about a week later I got a package at my door with a brand new Taillight.  This is an awesome product from a company who stands behind their product.   I highly recommend it. You can buy the Serfas Thunderbolt on Amazon I’ve already bought one for my kids.

Comments closed

Xcode 6 Prefix Header

Prior to Xcode 6, all new projects contained a prefix header.  In Xcode 6 a prefix header is no longer included in the default project. Instead of using a prefix header you should put your imports in the files that need them.  But in the case that you need one, you can still add one.

From the menu, select File > New > File…

xcode6_prefixHeader1

 

Choose iOS > Other > PCH File

xcode6_prefixHeader2

 

In the Build Settings, each for “prefix” to narrow down your choices.  Under “Apple LLVM 6.0 – Language” find “Prefix Header”.  Add “$(SRCROOT)/PrefixHeader.pch”.  Make sure the path is correct.  When you close the dialog, it shows the expanded path.

xcode6_prefixHeader3

 

Comments closed

Xcode 6 category

After updating to Xcode 6, I thought Apple removed the ability to create a category when creating a new file. I was wrong. They just moved it.

To create a category in Xcode 6, choose File > New > File
xcode6_category1

 

Then select iOS > Source > Objective-C File

xcode6_category2

 

Choose File Type: Category.  Then enter you File name and the class you want to create a category for.

xcode6_category3

Comments closed