Update iLife Apps with iTunes Account
The following commands will remove Mac App Store receipts from iLife apps and let you update iLife apps through Software Update:
|
1 2 3 4 5 |
rm -rf "/Applications/iMovie.app/Contents/_MASReceipt" rm -rf "/Applications/GarageBand.app/Contents/_MASReceipt" rm -rf "/Applications/iPhoto.app/Contents/_MASReceipt" mv /Applications/iPhoto.app/Contents/Frameworks/iLife*.framework /Library/Frameworks/. |
Credit: Ben Goodstein & Rob Middleton – https://groups.google.com/forum/#!topic/macenterprise/C2a1cgc_Ogg/discussion
App Script – Automated Daily SMS
The idea of this script is to pull data from a website with the UrlFetchApp, slice the html that I wanted to send out as a text message, and them email all my contacts in a particular contact group.
I send SMS through email by using a cool trick I’ll be posting on soon.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
function getPostAndEmail() { // gets content from home page var response = UrlFetchApp.fetch("http://rickhotz.com/").getContentText(); // slices out latest post var sliceS = response.indexOf('<!--StartPrayer-->')+18; var sliceE = response.indexOf('<!--EndPrayer-->'); var post = response.slice(sliceS,sliceE); // slices out bible verse var sliceS = post.indexOf('<p>')+3; var sliceE = post.indexOf('</p>'); var verse = post.slice(sliceS,sliceE); // slices out prayer var sliceS = post.lastIndexOf('<p>')+3; var sliceE = post.lastIndexOf('</p>'); var prayer = post.slice(sliceS,sliceE); // logs prayer and verse Logger.log(verse + ' ' + prayer); // gets all contacts in 'Daily Prayer' and sends daily message var contacts = ContactsApp.getContactGroup('Daily Prayer').getContacts(); for (var i = 0; i < contacts.length; i++ ) { var addresses = contacts[i].getEmails(); var address = addresses[0].getAddress(); // sends email GmailApp.sendEmail(address, '', verse + ' ' + prayer); } } |
This portion of the code automatically joins users to the sms mailing list. I run a few filters on my mail (within Gmail) that automatically tags any message with the phrase #join or #remove and apply the appropriate label. This script runs on hourly interval and grabs the email address from those labels, add the address to my contacts as an anonymous user and removes the label from the email. You can set it up to add a name to the contact, but it was not needed in my scenario.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
function joinList() { // run once to get threads and thread count var threads = GmailApp.getUserLabelByName('join').getThreads(); var threadCount = GmailApp.getUserLabelByName('join').getUnreadCount(); // run once to get group var group = ContactsApp.findContactGroup('Daily Prayer'); for (var j = 0; j < threadCount; j++) { // gets messages in thread var messages = threads[j].getMessages(); // marks thread as read threads[j].markRead(); // gets first message in thread var message = messages[0]; // gets 'from' field and sliceS out email address var contactEmail = message.getFrom(); var sliceS = contactEmail.indexOf('<')+1; var sliceE = contactEmail.indexOf('>'); var email = contactEmail.slice(sliceS,sliceE); // creates an array of all the address in 'Daily Prayer' list var contacts = ContactsApp.getContactGroup('Daily Prayer').getContacts(); var addressArray = []; for (var i = 0; i < contacts.length; i++ ) { var addresses = contacts[i].getEmails(); var address = addresses[0].getAddress(); addressArray.push(address); } // checks array duplicates if (addressArray.indexOf(email) == '-1.0') { // adds new contact ContactsApp.createContact('anon', 'subs', email).addToGroup(group); } } } function removeList() { // run once to get threads and thread count var threads = GmailApp.getUserLabelByName('remove').getThreads(); var threadCount = GmailApp.getUserLabelByName('remove').getUnreadCount(); for (var j = 0; j < threadCount; j++) { // gets messages in thread var messages = threads[j].getMessages(); // marks thread as read threads[j].markRead(); // gets first message in thread var message = messages[0]; // gets 'from' field and sliceS out email address var contactEmail = message.getFrom(); var sliceS = contactEmail.indexOf('<')+1; var sliceE = contactEmail.indexOf('>'); var email = contactEmail.slice(sliceS,sliceE); // removes contact from group 'Daily Prayer' var contacts = ContactsApp.getContactGroup('Daily Prayer').getContacts(); for (var i = 0; i < contacts.length; i++ ) { var addresses = contacts[i].getEmails(); if (addresses[0].getAddress() == email) { contacts[i].deleteContact(); } } } } |
Hope this helps someone else out there.
Blessings,
Ryan
Control AirPlay Access
Reflection is a good solution, but on a per user basis. One of the problems with reflection is that they license per user, not per machine. We have 15 Apple TVs and are running Reflection on 6 machines. We have 10 more Apple TVs on the way. I haven’t found a MDM solution for managing the Apple TV, but have a way to control access to them.
Keep in mind that all the devices (Apple TV, Desktop/Laptop running reflection, & iPad) need to be on the same subnet/VLAN. For best performance, connect the Apple TV and/or Desktop/Laptop with an ethernet connection on the same subnet/VLAN as the wireless network that the instructors iPad is on – you’d have the least latency problems.
Our solution to the password compromise problem is to use the VLAN technique.
Hardwire your Apple TV or Desktop/Laptop running Reflection and set those ports to VLAN 100. Create an SSID that only your instructors iPads (and Laptop if running Reflection) can connect to and set it to the same VLAN. Run an extra SSID that is not on the same VLAN for students to connect to.
VLAN 100 for Apple TV
VLAN 100 for Desktop/Laptop running Reflection
VLAN 100 for SSID: Instructor Wi-Fi
VLAN 200 for SSID: Student Wi-Fi
Then you can set the name of the Apple TV (we use by room number) and it really wouldn’t matter who knows the password. You can set it to the room number. Instructors just have to respect the other instructors and not try to take control over them. You’d just have to manage control over that instructor SSID. If you have more than 10 Apple TVs, I’d use different VLANs for different rooms because the AirPlay selection box on the iPad isn’t very big. Less than 10 can stay on the same VLAN.
Also, if you need to give access to AirPlay to your students, buy 2 Apple TVs. Put one on the Inst. VLAN and the other on the student VLAN. Then allow the teacher to switch between them with your media switcher.
Support Suggestion
Techies are here to fix the problem. It doesn’t matter who does it, or who gets the credit. Resist the urge to be the “winner”. It tends to lead to unintentional results. If you have something to say that you truly feel can help the situation, say it. If it helps, great!. If nobody listens to you and the problem doesn’t get solved, it’s unfortunate for them. Try and keep your suggestions peaceful. If you had the solution, don’t rub it in the others face. Politely accept the fact that you helped solve the problem and continue to the next problem. There is only one winner – the end-user. Let’s help them win. You’ll boost their confidence – resulting in a happy customer who will return back to you for support.
Unsolved problems matter to me. You matter to me. If my life consisted of constantly pushing my brian to the limit, I'd be happy. Uncovering knowledge is interesting. Using my imagination drives me. I survive by knowing how to find things. Let's talk. 








