Cleanest way to upload image to S3 from Mac OS X app? - macos

I have been trying to find an easy solution to upload a small image (500px) to S3 from a Mac app I am building.
The mac app is an OS X version of an iOS app I have already built. The only interaction I need to have with AWS is to upload images so I am just looking for the best practice method for doing this.
Is creating a PHP script to do the job on the EC2 instance the best way to go about this since there isn't an AWS SDK for Mac?

I have created an OSXified version of the iOS SDK here. I have added a scheme to build only the modules (AWSCore, AWSCognito and AWSS3) you need for S3 interactions. Once you build, locate the Products directory in finder and you should see the 3 .framework files you will need to add to your OSX project.
From that point onwards it is the same as using the iOS library, instructions for which are provided here (Getting started with Swift/Objective-C sections).
When using in your own project make sure you add a build phase for copy files and add these frameworks there. Lastly turning on codesigning will prevent you from having to interact with Keychain Access everytime you run your app.

Related

How can I include an Apple Help Book when building my app for OSX

I have developed a Firemonkey app for Windows and OSX. I have also developed an Apple Help Book containing the help for my application when it is run on OSX. (I have a different help system when running in Windows.) Apple's recommended location for the help bundle is in the app's Contents/Resources folder. I can copy the help bundle there manually but it gets deleted every time I run my app in the IDE or deploy my app.
I thought about trying to use the deployment manager but this only allows files to be deployed, not bundles. The help bundle contains a large number of files spread amongst various folders and it would be tedious to set each file up individually in the deployment manager. Moreover, I would have to change the setup every time I added or deleted a page from help since each page is a separate HTML file in the bundle.
So for now, I am manually pasting the help bundle into Contents/Resources. Does anyone know of a more efficient method to incorporate the help bundle?
After much research, I came to the conclusion that the only reasonable way to incorporate an Apple helpbook is to paste its bundle into the app bundle at the location Contents/Resources. I thought about locating it elsewhere but Contents/Resources is where Apple recommends it should go. This is inconvenient because it gets erased whenever I redeploy the app or run it from the IDE. But until Firemonkey is enhanced to make provision for helpbooks, this seems to be the only acceptable way to do it. The program 'Packages' http://s.sudre.free.fr/Software/Packages/about.html is then a great way to package the app for issue to customers.

How to modify Xcode project settings from command line? - so it produces a MacAppStore app and a non-MacAppStore app

I have a Xcode project that outputs a Mac app that is distributed outside the Mac App Store. It works fine. Now, the client wants it in the Mac App Store. To achieve this I've disabled several features of the original app. Now, I'm facing the question: how to integrate the build process of the Mac App Store app in a painful-less way? For the Non-Mac App Store app we use Jenkins.
I thought it could be possible to keep the non-Mac App Store project settings and then enable/disable/modify it with command line. Errrrr!. I'm wondering if anyone else have faced the same situation and how did you solve it?. Or maybe I'm opening Pandora's box wit my current approach.
To list the stuff I need to enable/disable:
Disable source code. Solution: ifdefs
Enable the app-sandbox. Solution: adding 'com.apple.security.app-sandbox' to entitlements.
Delete dependencies in the 'Target dependencies'. Solution: ????.
Delete libraries in the "link binary with libraries". Please, note that the libraries are already listed in Xcode project settings, I want to delete them.
Change the signing profile. Solution: Add a new scheme with the right values (Mac App Store).
FYI. I'm using Xcode 5.1.1.
To modify Xcode project settings from command line, you could try a python module pbxproj.
You can pip install pbxproj to have it.
And here's an example provided in the official repo:
from pbxproj import XcodeProject
# open the project
project = XcodeProject.load('myapp.xcodeproj/project.pbxproj')
# add a file to it, force=false to not add it if it's already in the project
project.add_file('MyClass.swift', force=False)
# set a Other Linker Flags
project.add_other_ldflags('-ObjC')
# save the project, otherwise your changes won't be picked up by Xcode
project.save()
I'm not sure about Xcode 5.1.1. But if you're already using a new scheme to change the signing profile, why can't you use it to delete the dependencies and linked libraries? These can be changed in the Build Phases for this specific target. Or you have some more context to explain why you can't do this?

Bundled content in an app store app

I am trying to get my app submitted to the mac app store and I am having a bit of a design problem. Our app is an authoring tool and comes bundled with many projects created with the tool. Before the time of the app store, we would ship our app as an .img file which contianed a project directory and our app. Since I am only going to be submitting the .app file to the app store
with my app I am wondering where I should but the projects directory.
Initially I tried to put the projects directory inside of the bundle but this will not work because it is possible for the user to make changes to projects which might add new files to the project directory and this would make the sandboxing unhappy and mark the app as invalid.
What is the correct place to store such resources? I assume they should go inside the container? If so, what would be an elagent way to deploy this projects directory? Since we do not have installers in Apple land what would be the best place to deploy this projects directory? Do I just need to check on app launch if the projects are present and if not copy them from the bundle? This seems wrong.
Do I just need to check on app launch of the projects are present and if not copy them from the bundle?
Actually, this sounds right to me. As you said, the user cannot change/add any files in the app bundle. If you have resources there that the user needs to interact with, I would copy them to the ~/Library/Application Support/MyApp/ folder when they are needed. The user can then interact with the files from that location. (When sandboxed they go into a different but related location.)
I don't really know what your app does, but it would also seem like a possibly useful feature to "reset" the project files/folders back to a starting state. So copying the files in this way would allow for that kind of behavior as well.

How can I add a file to an existing Mac OS X .app bundle?

I'm writing a modification for Arduino that turns an Arduino board into a game controller.
In order to add my board-specific files to the programming environment, right now, the user needs to open up the Arduino.app package, and then add a few different files into a various folders in the Arduino.app package. It is hardly user friendly. How can I make an installer which automatically moves my files into the appropriate locations within Arduino.app, or is that impossible?
You can download PackageMaker (available here, in the Auxiliary Tools for Xcode download).
You will then be able to make a .pkg that the user will be able to install simply by double clicking. You can also make a script that will check if Arduino is already installed and stop the installation if it's not. You get the idea.
Normally, especially in today's code-signed MacOS app approach (where any modifications to the app or its resources/files would break the app & make it not-launchable), I would say "you're out of luck".
But Arduino is one of the rare OPEN SOURCE apps.
You can fetch the source code from this page:
http://arduino.cc/en/Main/Software
And make your modifications to the project and then build a fresh, customized copy for yourself.
I figured out how to do it using the magic of scripting!
You can take a look at my solution here:
http://code.google.com/p/unojoy/source/browse/#hg%2FLeoJoy%2FLeoJoy%20Installer.app%2FContents%2FMacOS
The folder structure it's in makes it show up as an app on OSX, and the two scripts (LeoJoy Installer and LeoJoyInstaller.command) copy the files. There's two scripts there because I wanted to have a console window pop up to show the user progress, and that's the only way I could figure out how to do that. But, if you run this app in the same directory as the Arduino app, it copies files from the installer app into the Arduino.app package, updating the Arduino app so I don't have to distribute a whole separate version of Arduino.

How to make installer set up of Cocoa project?

I have make one application Cocoa using XCode. Now I want to make setup file of project. So other user can install this project directly in his system.
In short, the polite way is to build your app with the Release Configuration, put it into a Disk image with Disk Utility or zip it up, then put it on a server and have people download it.
If you want a longer and more detailed answer, read Apple's Software Distribution Guide.

Resources