WHELM Mac OS

broken image


When look­ing at the changel­og for the lat­est ver­sion, it's hard to be­lieve thaton­ly six months passed since the last re­lease, 2018.04.The list is — as usu­al — very long, so I'm on­ly cher­ry-pick­ing the mostin­ter­est­ing bits. Scroll way down for the full de­tailed change lists.

  1. Mac Os Versions
  2. Whelm Mac Os X
  3. Whelm Mac Os Catalina
  4. Whelm Mac Os Download

An­i­ma­tion im­port and play­back

2018-12-09 00:23:57. I needed to record a demo on a Mac, I don't own a Mac and was contemplating borrowing one from a friend. Then I realised, I finally had an excuse to give this a go! I've been itching to since I read - Accelerated KVM guests on WSL 2, an awesome write-up on how to run accelerated KVM guests on WSL2 from @unixterminal. OSX by default comes with Python 2.7 installed, so we're going to update to the latest version of Python using brew. Then, we're going to deploy the newest version of git and vim and install. In con­trast, HTM­L5 APIs be­have like mac­OS / iOS and Plat­form::Em­scripte­nAp­pli­ca­tion fol­lows that be­hav­ior — frame­buf­fer­Size thus match­es de­vice pix­els while win­dow­Size (to which all events are re­lat­ed) is small­er on HiD­PI sys­tems.

This long-await­ed fea­ture fi­nal­ly man­aged to rise to the top of the pri­or­i­tylist and so the new re­lease con­tains a brand-new An­i­ma­tion names­pace.Some de­sign ideas are bor­rowed from Ozz-An­i­ma­tion,with one end goal be­ing high-per­for­mance play­back of an­i­ma­tions im­port­ed fromglTF files (with oth­er for­mats com­inglat­er). The oth­er goal is be­ing able to quick­ly it­er­ate on hand-craft­edan­i­ma­tions of ar­bi­trary val­ues when writ­ing a game­play or UI tran­si­tions.

The an­i­ma­tion li­brary sup­ports in­ter­leaved or sep­a­rate keyframe da­ta forcache-op­ti­mized da­ta ac­cess; floats, std::chrono, frame in­dex(or just any­thing) for rep­re­sent­ing time, and yes, you can al­so an­i­matestrings, enum val­ues, bools or even the state of an­oth­er an­i­ma­tion —and why not an­i­mat­ing a time val­ue to make the play­back non-lin­ear! There's aset of builtin in­ter­po­la­tion modes —con­stant, lin­ear, spher­i­cal lin­ear and spline-based; but you can al­so sup­plyyour own in­ter­po­la­tor func­tion if you need some ease-in/ease-out, or, forex­am­ple, un­pack a quater­nion from a 10–10–10–2 rep­re­sen­ta­tion first.

At the mo­ment the An­i­ma­tion li­brary is marked as ex­per­i­men­talas its API is not set in stone yet. There's a lot to ex­plain, so stay tuned forde­tailed in­tro­duc­to­ry blog­posts (and ex­am­ples) for all fea­tures. For a briefover­view, check the An­i­ma­tion::Track and An­i­ma­tion::Play­er classdocs.

An­i­ma­tion im­port is done through the new Trade::An­i­ma­tion­Da­ta class andat the mo­ment the Trade::Ab­strac­tIm­porter in­ter­faces han­dle just ba­sicob­ject trans­for­ma­tion. Skin­ning and mor­ph­ing will need some more-or-lessbreak­ing changes to some Trade APIs and so these fea­tures are sched­uledfor next re­leas­es. Along with that, the goal for the Trade li­brary isal­low­ing ze­ro-copy as­set im­port — for ex­am­ple play­ing back an an­i­ma­tiondi­rect­ly from a mem­o­ry-mapped glTF file, with no da­ta copies in be­tween. Seemosra/mag­num#240 for fur­ther work in this area.

The fun barely started!

I had to stop adding new fea­tures be­cause the re­lease would oth­er­wise nev­ermake it out. There's al­ready more in the buf­fer — builtin eas­ingfunc­tions, in­ter­po­la­tor chain­ing and more. See mosra/mag­num#101help want­ed for de­tails. There's lot of small andself-con­tained things to work on, so if you feel brave and want to help,let us know!

Mag­num Play­er

While the An­i­ma­tion API it­self doesn't have any ded­i­cat­ed ex­am­ple yet,there's now a new app, Mag­num Play­er, that can play back a scene fileyou throw at it. The fi­nal goal for this app will be show­cas­ing the full Mag­numfea­ture set — de­bug­ging and in­tro­spec­tion tools, ma­te­ri­al tweak­ing etc. Checkout the on­line ver­sion be­low — it sup­ports mul­ti-file drag&drop, so sim­plydrop a glTF file on it to play it. If you don't have any glTF file handy,there's the of­fi­cial Khronos glTF sam­ple mod­el re­pos­i­to­ryon GitHub. Sketch­fab al­so has 1000s of mod­elsdown­load­able as glTF.

Ini­tial work on the Vulkan back­end

Af­ter the hard work of re­mov­ing manda­to­ry OpenGL de­pen­den­cy was done in2018.04, Mag­num is slow­ly gain­ing bits and pieces need­ed for Vulkan sup­port. InJune I took over a main­tain­er­ship of flextGL and addedVulkan sup­port to it. Short­ly af­ter, Mag­num gained a Vk li­brary thatpro­vides plat­form-in­de­pen­dent func­tion point­er load­ing. It gives you a choicewhether you want glob­al func­tion point­ers (like with OpenGL) or man­age themlo­cal­ly. See the orig­i­nal post about flextGLfor de­tails.

The Vk li­brary al­so pro­vides con­ver­sion of gener­ic Pix­elFor­mat,Sam­pler­Fil­ter, Mesh­Prim­i­tive, … enums to Vulkan-spe­cif­icVk­For­mat, Vk­Fil­ter, VkPrim­i­tive­Topol­o­gy, … val­ues.That al­lows you to use Mag­num as­set man­age­ment APIs to load im­age and sceneda­ta and use them di­rect­ly with­out time-con­sum­ing man­u­al for­mat con­ver­sion.There is al­so a new ex­am­ple fo­cused on ren­der­ing a sim­ple tri­an­gle to anoff­screen buf­fer us­ing a hand­craft­ed SPIR-V shad­er and then sav­ing it as a PNGus­ing the Mag­num PngIm­age­Con­vert­er plug­in.

There will be more

Fur­ther ad­di­tions like shad­er/SPIR-V tools, de­vice/in­stance ab­strac­tionsand ini­tial pieces of the Vulkan back­end are sched­uled for next re­leas­es.Sub­scribe to mosra/mag­num#234 for up­dates.

HiD­PI sup­port

Long gone are the days of a stan­dard 1024×768 res­o­lu­tion and fixed 96 DPI— dense screens are now a com­mon fea­ture for high­er-end lap­tops and desk­tops.In the 2018.10 re­lease, Mag­num is DPI-aware on mac­OS, iOS, Lin­ux andEm­scripten. The us­abil­i­ty goal is that re­quest­ing an 800×600 win­dow willmake it the same phys­i­cal size as an 800×600 win­dow would have on a 96DPI screen — so ba­si­cal­ly with no ex­tra in­volve­ment from the us­er. For weband mo­bile, Mag­num sim­ply en­sures that for giv­en can­vas / screen size you'llget all the pix­els that are there, with no scal­ing on top. If you have a HiD­PIscreen, check out the We­bGL demos on the Show­casepage — ev­ery­thing should be nice­ly crisp. This top­ic is way more com­plex thanit might seem, see DPI aware­ness for a de­tailed over­viewof DPI-aware­ness on all plat­forms and what that means for you as a de­vel­op­er.

Un­for­tu­nate­ly out-of-the-box Win­dows sup­port didn't make it to the re­lease(though you are able to force ar­bi­trary scal­ing with a --magnum-dpi-scalingpa­ram­e­ter). Full An­droid sup­port and ad­vanced things like DPI change eventswhen drag­ging a win­dow across dif­fer­ent­ly dense mon­i­tors are al­so wait­ing to bedone, see mosra/mag­num#243help want­ed for de­tails.

Math good­ies

In­tro­duc­tion of the An­i­ma­tion li­brary re­quired quite a few ad­di­tions tothe Math li­brary — there's a new Math::Cu­bicH­er­mite class forCu­bic Her­mite splines. As a gener­ic base for TCB curves and Cat­mull-Rom splinesthey are eas­i­ly con­vert­ible to and from Math::Bezi­er.

Cubic spline interpolation is henceforth referred to as splerp

— Thew (@AmazingThew) December 24, 2016

And be­cause spline stor­age is use­less on its own, the zoo of in­ter­po­la­tionfunc­tions got ex­tend­ed with Math::splerp() vari­ants. Be­sides that, theex­ist­ing Math::lerp() was ex­tend­ed to al­low lin­ear in­ter­po­la­tion ofMath::Cu­bicH­er­mite points, if you ev­er need that, and there's a newMath::se­lect() util­i­ty that does con­stant in­ter­po­la­tion of all ex­ist­ingmath types. And al­so strings, enums or bool­eans. See thefull list in the doc­u­men­ta­tion. There'sal­so a re­cent blog post aboutne­glect­ed op­ti­miza­tion op­por­tu­ni­ties in quater­nion in­ter­po­la­tion.

As a side-prod­uct of Squareys' bach­e­lor the­sis,Mag­num gained a large col­lec­tion of cone in­ter­sec­tion func­tions in theMath::In­ter­sec­tion names­pace. The Math::Range class gotin­ter­sec­tion meth­ods as well, along with oth­er niceties.

Many projects ei­ther use or in­ter­face with the GLMli­brary and so it made sense to be in­ter­op­er­a­ble with it. Sim­ply in­clude one ofthe head­ers in the GlmInte­gra­tion li­brary and you'll get con­ver­sion ofall vec­tor, ma­trix and quater­nion types and al­so an abil­i­ty to print the GLMtypes us­ing Util­i­ty::De­bug:

List­ing all the ad­di­tions to Math li­brary would be be­yond over­whelm­ing, jumpto the com­plete changel­og for the rest.

Whelm

Lit­tle big de­tails

We're still un­sure if the up­com­ing Vulkan back­end will be able to dosim­i­lar amount of work in such a terse ex­pres­sion. That could be botha bad and a good thing.

Yes, it's now pos­si­ble to get a GL::Mesh di­rect­ly fromTrade::Mesh­Da­tawith a sin­gle click —just use the brand new Mesh­Tools::com­pile() reim­ple­men­ta­tion and it'lldrag all GL::Buf­fer in­stances along with it­self, with­out you need­ing toman­age them. Of course there are flex­i­bil­i­ty trade­offs, so when us­ing the meshAPIs di­rect­ly, you have the op­tion of GL::Mesh::ad­dVer­texBuffer() ei­thertak­ing a non-own­ing ref­er­ence to the buf­fer or ful­ly tak­ing over its own­er­ship.

There's a new Con­tain­ers::Sco­pe­dEx­it class that sim­ply calls a passedex­it / close / de­stroy func­tion on giv­en val­ue at the end of scope. Very use­fulwhen in­ter­act­ing with low-lev­el C APIs and much eas­i­er than wrestling withstd::unique_p­tr, try­ing to con­vince it to do the same.

If you ev­er need to it­er­ate on a ar­ray of in­ter­leaved val­ues and take al­waysthe third val­ue, there's now Con­tain­ers::StridedAr­rayView that ab­stractsit away. It's used in­ter­nal­ly by the An­i­ma­tion::Track­View APIs to al­lowfor both flex­i­ble and cache-ef­fi­cient lay­out of keyframe da­ta.

There's a new Util­i­ty::for­mat() fam­i­ly offunc­tions for Python-style type-safe string for­mat­ting. The rea­son I'm addingthis is be­cause std::os­tream (and to some ex­tent printf())is no­to­ri­ous­ly in­ef­fi­cient, neg­a­tive­ly af­fect­ing ex­e­cutable size es­pe­cial­ly onasm.js / We­bAssem­bly tar­gets. How­ev­er the full im­ple­men­ta­tion didn't make itin­to the re­lease, on­ly the sur­face APIs, Mag­num is not port­ed away from streamsjust yet — there will be a de­tailed post about all this lat­er 😉

More of an in­ter­nal thing, the De­bug­Tools::Com­pareIm­age util­i­ty got aCom­pareIm­ageToFile coun­ter­part,to­geth­er with oth­er com­bi­na­tions. Dani gonzalez mac os. In sub­se­quent up­dates, these will get usedfor fuzzy shad­er out­put ver­i­fi­ca­tion — very im­por­tant for im­ple­ment­ing PBRshaders that are lat­er on the roadmap.

Pro­to­typ­ing

Shown above is a new Prim­i­tives::gra­di­en­t2D() func­tion (to­geth­er withits 3D coun­ter­part), use­ful for sim­ple back­drops. The Shaders::Phongshad­er got a long-re­quest­ed sup­port for mul­ti­ple lights and there's now al­phamask­ing sup­port in both Shaders::Phong and Shaders::Flat —use­ful for quick'n'dirty pro­to­typ­ing when you don't want to both­er your­selfwith depth sort­ing or OIT.

As­set man­age­ment im­prove­ments

Since the TinyGlt­fIm­porter plug­in ini­tialre­lease in 2018.04, it's re­ceiv­ing an end­less stream of up­dates. While thebig­gest new fea­ture is an­i­ma­tion im­port, it al­so re­ceived sup­port formul­ti-prim­i­tive mesh­es, name map­ping for all da­ta, cam­era as­pect ra­tio im­portand var­i­ous con­for­mance fix­es and per­for­mance im­prove­ments. It's now eas­i­er toac­cess its in­ter­nal state, in case youwant to parse cus­tom glTF prop­er­ties or ac­cess da­ta that the im­porter does notsup­port yet.

To sup­port load­ing da­ta from mem­o­ry, from AAssetManager on An­droid orfor ex­am­ple voa drag&drop on Em­scripten, all scene and im­age im­porters nowsup­port file load­ing call­backs.For you it means you can con­tin­ue load­ing as­sets as usu­al — us­ing theirfile­names — and on­ly set up a dif­fer­ent file call­back for each plat­form. Theim­ple­men­ta­tion was done in a way that makes all ex­ist­ing (and fu­ture) plug­insim­plic­it­ly work with file call­backs, more­over theTinyGlt­fIm­porter,As­simpIm­porter andOpenGex­Im­porter al­so use pro­vid­ed filecall­backs for ex­ter­nal da­ta ref­er­enced from scene files (such as im­ages or da­tabuf­fers).

There's fi­nal­ly a JpegIm­age­Con­vert­er plug­infor com­press­ing JPEG files, us­ing a lib­JPEG im­ple­men­ta­tion of your choice —be it the vanil­la im­ple­men­ta­tion, lib­jpeg-tur­boor, for ex­am­ple, MozJPEG. Sim­i­lar­ly, thestb_im­age-based StbIm­age­Con­vert­ergot up­dat­ed to sup­port JPEG out­put as well — and you can load ei­ther of themus­ing the JpegImageConverter alias. Both plug­ins sup­port spec­i­fy­ing theout­put qual­i­ty via a run­time set­ting; more en­cod­ing op­tions may be added in thefu­ture.

Among oth­er things, the Stb­True­Type­Font wasup­dat­ed to a new ver­sion of stb_truetype, gain­ing OTF sup­port, and you cannow load it (along with the oth­er Harf­Buz­z­Font andFreeType­Font im­ple­men­ta­tions) via the gener­icOpenTypeFont alias.

There's al­ways some­thing to im­prove in the docs

If you hap­pen to be us­ing Mag­num with a buildsys­tem oth­er than CMake, there'snow a high-lev­el guide, point­ing out the big­gestpain points. The Math::Ma­trix4 and Ma­trix3 docsare im­proved with equa­tions vi­su­al­iz­ing most op­er­a­tions; theMath::In­ter­sec­tion and Math::Dis­tance func­tions andMath::Con­stants got up­dat­ed equa­tions as well.

The Us­ing the scene graph guide now has a vis­ual in­tro, ex­plain­ing the ba­siccon­cepts; the JavaScript, HTM­L5 and We­bGL and An­droid guideswere ex­tend­ed with fur­ther tips and trou­bleshoot­ing items. Oh, and theShaders and Prim­i­tives docs now have im­ages that look prop­er­lycrisp on HiD­Pi screens.

Mac Os Versions

Not all roads led to Rome

Whelm Mac Os X

Mag­num is now over eight years old and it be­came ap­par­ent that some ear­lyfunc­tion­al­i­ty didn't stand the test of time — ei­ther be­cause it de­pend­ed ona now-out­dat­ed tool­kit, be­cause the re­quired time in­vest­ment for con­tin­uedmain­te­nance was not worth it or sim­ply be­cause it was a de­sign ex­per­i­ment thatfailed. The fol­low­ing li­braries are now marked as dep­re­cat­ed, are not built byde­fault (in case they ev­er were) and will be com­plete­ly re­moved in about sixmonths time.

  • The Shapesob­so­lete li­brary, to­geth­er withDebugTools::ShapeRendererob­so­lete and theBulletIntegration::convertShape()ob­so­lete func­tion.Failed de­sign ex­per­i­ment that couldn't ev­er be made per­for­mant (and abus­ing% op­er­a­tors for col­li­sion queries was just plain wrong).

    Re­lat­ed ge­om­e­try al­go­rithms were moved to Math::Dis­tance andMath::In­ter­sec­tion names­paces. If you need a full-fledged physicsli­brary, please have look at Bul­let, whichhas Mag­num in­te­gra­tion in Bul­let­Inte­gra­tion (to­geth­er with de­bugdraw im­ple­ment­ed in Bul­let­Inte­gra­tion::De­bug­Draw), or atBox2D, which has a Mag­num ex­am­pleas well.

  • The Platform::GlutApplicationob­so­lete ap­pli­ca­tion. It'sbased on an out­dat­ed GLUT tool­kit, has porta­bil­i­ty is­sues and doesn't makesense on the path for­ward to Vulkan. Con­sid­er switch­ing to ei­therPlat­form::Sdl2Ap­pli­ca­tion or Plat­form::GlfwAp­pli­ca­tion.

  • The ColladaImporterob­so­lete plug­in, be­cause it's based onan out­dat­ed Qt4 tool­kit. More­over, due to the sheer com­plex­i­ty of theCOL­LA­DA for­mat and poor con­for­mance of var­i­ous ex­porters it's not fea­si­bleto main­tain a builtin im­porter any­more. Con­sid­er ei­ther us­ingAs­simpIm­porter for COL­LA­DA im­port orswitch­ing to bet­ter-de­signed and bet­ter-sup­port­ed for­mats such as glTF orOpenGEX us­ing TinyGlt­fIm­porter orOpenGex­Im­porter. There's al­so the of­fi­cialCOL­LADA2GLTF con­vert­er.

Visual Studio 2017

With a heavy heart I have to say that re­cent up­dates of MSVC 2017 werere­gress­ing in­stead of im­prov­ing with their C++11 con­for­mance, crash­ing withIn­ter­nal Com­pil­er Er­ror on code in­volv­ing constexpr. While weman­aged to re­pro­duce and work around all re­port­ed is­sues so far, it mayhap­pen that your code trig­gers some new cor­ner case. Try to up­date to thelat­est ver­sion first and if the prob­lem per­sists,let us know. Thank you and sor­ry for the bumps.

Note that MSVC 2015 is not af­fect­ed by these.

New ex­am­ples

Two new ex­am­ples were con­trib­uted by our great com­mu­ni­ty, name­ly an in­te­gra­tionof the Box2D physics en­gine and an ad­vanced depth-aware mouse in­ter­ac­tionex­am­ple. Both are port­ed to We­bGL and you can play with them right now:

HTTPS 🔒

The Mag­num web­site is nev­er stor­ing any cook­ies or do­ing us­er track­ing (anddoesn't plan to be do­ing that), so there's no need to be wor­ried about yourda­ta be­ing com­pro­mised. Nev­er­the­less, it's now served over HTTPS, with acer­tifi­cate from Let's En­crypt. Some trade­offswere made as it's ei­ther full se­cu­ri­ty or sup­port­ing the not-most-re­centbrowsers (but not both), so if you ex­pe­ri­ence any is­sues, please let us know.

Some­times ahard kickis all it takes to get things done.

Con­tri­bu­tions wel­come

Mag­num is now part­ner­ing with a few uni­ver­si­ties with a goal of im­prov­ingcom­put­er graph­ics cour­ses by of­fer­ing stu­dents things that are fun to playwith. You're in­vit­ed to the par­ty as well — each GitHub re­pos­i­to­rynow has is­sues marked with a help want­ed la­bel and theseis­sues are specif­i­cal­ly picked to be self-con­tained, ex­cer­cise a well-de­finedarea of knowl­edge and to not re­quire deep un­der­stand­ing of Mag­num in­ter­nals.The most re­ward­ing among these are var­i­ous ex­am­ples, you can al­so im­ple­ment afan­cy al­go­rithm, in­te­grate sup­port for a new file for­mat or share yourex­per­tise in an area you know the best. If you pick some­thing, let us knowand we'll help you get on the right path.

There's al­so a pos­si­bil­i­ty to write a guest postfor this very blog and share in­ter­est­ing de­tails about a Mag­num-re­lat­ed thingyou're work­ing on.

Up­grad­ing from pre­vi­ous ver­sions

In con­trast to 2018.04, this re­lease is more of an evo­lu­tion­al one.Nev­er­the­less, even though we're al­ways go­ing to ex­treme lengths to pre­serveback­wards com­pat­i­bil­i­ty, it may hap­pen that some changes will have neg­a­tiveaf­fect on your code. Please check the Dep­re­cat­ed APIs and Po­ten­tialcom­pat­i­bil­i­ty is­sues sec­tions in the com­plete changel­og be­low for morein­for­ma­tion.

Thanks to @mat­jam there's now aPPA re­pos­i­to­rycon­tain­ing pre­built pack­ages for Ubun­tu 14.04, 16.04 and 18.04. If you fol­lowthe #mov­ing­tog­it­lab move­ment,Mag­num now has a mir­ror on Git­Lab, butnote that pri­ma­ry de­vel­op­ment, roadmap and mile­stone plan­ning is stillhap­pen­ing on GitHub and will stay there for the fore­see­able fu­ture.

The 2018.10 re­lease is al­ready avail­able in Home­brewand Arch­Lin­ux AUR. At thetime of writ­ing, the PPA repos­i­to­ry, Vcp­kg andArch­Lin­ux re­pos are not up­dat­ed yet, we'rework­ing on get­ting the lat­est ver­sion there as well.

Com­plete changel­og

It's longer than you might ex­pect 😉

Spe­cial thanks

Lots of work in this re­lease is done thanks to ex­ter­nal con­trib­u­tors:

  • Jonathan Hale (@Squareys) — tire­less main­te­nance of all thingsVR, in­ter­sec­tion al­go­rithms, glTF, OpenGEX, As­simp im­porter up­dates andVcp­kg ex­per­tise
  • @sc­tur­tle — the Mouse In­ter­ac­tion ex­am­ple
  • Michal Miku­la — the Box2D ex­am­ple
  • Nathan Olleren­shaw (@mat­jam) — Ubun­tu PPA repos­i­to­ry main­te­nance
  • Alex­an­der F Rød­seth (@xypro­to) — con­tin­ued Arch­Lin­ux [community]pack­age main­te­nance
  • Patrick Wer­ner (@boon­to) — An­droid port of theMod­el View­er ex­am­ple
  • Ivan P. (@uzer­name) — on­go­ing ef­fort with im­prov­ing thedoc­u­men­ta­tion and mak­ing the li­brary more ap­proach­able for new­com­ers

Again thanks a lot to ev­ery­one, not to for­get all peo­ple who re­port­ed is­sues,sug­gest­ed im­prove­ments or just wrote en­cour­ag­ing mes­sages on theGit­ter chat. Cheers!

Dis­cus­sion: Twit­ter,Red­dit r/cpp,r/gamedev,r/gltf,Hack­er News,mail­ing list-->

Use shell scripts to extend device management capabilities in Intune, beyond what is supported by the macOS operating system.

Note

Rosetta 2 is required to run x64 (Intel) version of apps on Apple Silicon Macs. To install Rosetta 2 on Apple Silicon Macs automatically, you can deploy a shell script in Endpoint Manager. To view a sample script, see Rosetta 2 Installation Script.

Prerequisites

Ensure that the following prerequisites are met when composing shell scripts and assigning them to macOS devices.

  • Devices are running macOS 10.13 or later.
  • Devices are managed by Intune.
  • Shell scripts begin with #! and must be in a valid location such as #!/bin/sh or #!/usr/bin/env zsh.
  • Command-line interpreters for the applicable shells are installed.

Important considerations before using shell scripts

  • Shell scripts require that the Microsoft Intune management agent is successfully installed on the macOS device. For more information, see Microsoft Intune management agent for macOS.
  • Shell scripts run in parallel on devices as separate processes.
  • Shell scripts that are run as the signed-in user will run for all currently signed-in user accounts on the device at the time of the run.
  • An end user is required to sign in to the device to execute scripts running as a signed-in user.
  • Root user privileges are required if the script requires making changes that a standard user account cannot.
  • Shell scripts will attempt to run more frequently than the chosen script frequency for certain conditions, such as if the disk is full, if the storage location is tampered with, if the local cache is deleted, or if the Mac device restarts.

Create and assign a shell script policy

  1. Sign in to the Microsoft Endpoint Manager Admin Center.

  2. Select Devices > macOS > Scripts > Add.

  3. In Basics, enter the following properties, and select Next:

    • Name: Enter a name for the shell script.
    • Description: Enter a description for the shell script. This setting is optional, but recommended.
  4. Winter sleep - deluxe edition mac os. In Script settings, enter the following properties, and select Next:

    • Upload script: Browse to the shell script. The script file must be less than 200 KB in size.
    • Run script as signed-in user: Select Yes to run the script with the user's credentials on the device. Choose No (default) to run the script as the root user.
    • Hide script notifications on devices: By default, script notifications are shown for each script that is run. End users see a IT is configuring your computer notification from Intune on macOS devices.
    • Script frequency: Select how often the script is to be run. Choose Not configured (default) to run a script only once.
    • Max number of times to retry if script fails: Select how many times the script should be run if it returns a non-zero exit code (zero meaning success). Choose Not configured (default) to not retry when a script fails.
  5. In Scope tags, optionally add scope tags for the script, and select Next. You can use scope tags to determine who can see scripts in Intune. For full details about scope tags, see Use role-based access control and scope tags for distributed IT.

  6. Select Assignments > Select groups to include. An existing list of Azure AD groups is shown. Select one or more user or device groups that are to receive the script. Choose Select. The groups you choose are shown in the list, and will receive your script policy.

    Note

    • Shell scripts assigned to user groups applies to any user logging in to the Mac.
    • Updating assignments for shell scripts also updates assignments for Microsoft Intune MDM Agent for macOS.
  7. In Review + add, a summary is shown of the settings you configured. Select Add to save the script. When you select Add, the script policy is deployed to the groups you chose.

The script you created now appears in the list of scripts.

Monitor a shell script policy

You can monitor the run status of all assigned scripts for users and devices by choosing one of the following reports:

  • Scripts > select the script to monitor > Device status
  • Scripts > select the script to monitor > User status

Important

Irrespective of the selected Script frequency, the script run status is reported only the first time a script is run. Script run status is not updated on subsequent runs. However, updated scripts are treated as new scripts and will report the run status again.

Once a script runs, it returns one of the following statuses:

  • A script run status of Failed indicates that the script returned a non-zero exit code or the script is malformed.
  • A script run status of Success indicated that the script returned zero as the exit code.

Troubleshoot macOS shell script policies using log collection

You can collect device logs to help troubleshoot script issues on macOS devices.

Requirements for log collection

The following items are required to collect logs on a macOS device:

  • You must specify the full absolute log file path.
  • File paths must be separated using only a semicolon (;).
  • The maximum log collection size to upload is 60 MB (compressed) or 25 files, whichever occurs first.
  • File types that are allowed for log collection include the following extensions: .log, .zip, .gz, .tar, .txt, .xml, .crash, .rtf

Collect device logs

  1. Sign in to the Microsoft Endpoint Manager admin center.

  2. In Device status or User status report, select a device.

  3. Select Collect logs, provide folder paths of log files separated only by a semicolon (;) without spaces or newlines in between paths.
    For example, multiple paths should be written as /Path/to/logfile1.zip;/Path/to/logfile2.log.

    Important

    Multiple log file paths separated using comma, period, newline or quotation marks with or without spaces will result in log collection error. Spaces are also not allowed as separators between paths.

  4. Select OK. Logs are collected the next time the Intune management agent on the device checks in with Intune. This check-in usually occurs every 8 hours.

    Note

    • Collected logs are encrypted on the device, transmitted and stored in Microsoft Azure storage for 30 days. Stored logs are decrypted on demand and downloaded using Microsoft Endpoint Manager admin center.
    • In addition to the admin-specified logs, the Intune management agent logs are also collected from these folders: /Library/Logs/Microsoft/Intune and ~/Library/Logs/Microsoft/Intune. The agent log file-names are IntuneMDMDaemon date--time.log and IntuneMDMAgent date--time.log.
    • If any admin-specified file is missing or has the wrong file-extension, you will find these file-names listed in LogCollectionInfo.txt.

Log collection errors

Log collection may not be successful due to any of the following reasons provided in the table below. To resolve these errors, follow the remediation steps.

Error code (hex)Error code (dec)Error messageRemediation steps
0X87D300D12016214834Log file size cannot exceed 60 MB.Ensure that compressed logs are less than 60 MB in size.
0X87D300D12016214831The provided log file path must exist. The system user folder is an invalid location for log files.Ensure that the provided file path is valid and accessible.
0X87D300D22016214830Log collection file upload failed due to expiration of upload URL.Retry the Collect logs action.
0X87D300D3, 0X87D300D5, 0X87D300D72016214829, 2016214827, 2016214825Log collection file upload failed due to encryption failure. Retry log upload.Retry the Collect logs action.
2016214828The number of log files exceeded the allowed limit of 25 files.Only up to 25 log files can be collected at a time.
0X87D300D62016214826Log collection file upload failed due to zip error. Retry log upload.Retry the Collect logs action.
2016214740The logs couldn't be encrypted as compressed logs were not found.Retry the Collect logs action.
2016214739The logs were collected but couldn't be stored.Retry the Collect logs action.

Custom attributes for macOS

You can create custom attribute profiles which enable you to collect custom properties from managed macOS device using shell scripts.

Create and assign a custom attribute for macOS devices

  1. Sign in to the Microsoft Endpoint Manager Admin Center.

  2. Select Devices > macOS > Custom attributes > Add.

  3. In Basics, enter the following properties, and select Next:

    • Name: Enter a name for the script.
    • Description: Enter a description for the script. This setting is optional, but recommended.
  4. In Attribute settings, enter the following properties, and select Next:

    • Data type of attribute: Select the data type of the result that the script returns. Available values are String, Integer, and Date.
    • Script: Select a script file.

    Additional details:

    • The shell script must echo the attribute to be reported and the data type of the output must match the data type of attribute in the custom attribute profile.
    • The result returned by the shell script must be 20KB or less.

    Note

    When using Date type attributes, ensure that the shell script returns dates in ISO-8601 format. See the examples below.

    To print an ISO-8601-compliant date with time-zone:

    To print an ISO-8601-compliant date in UTC time:

  5. In Assignments, click Select groups to include. When you choose Select groups to include an existing list of Azure AD groups is shown. Select one or more user or device groups that are to receive the script. Choose Select. The groups you choose are shown in the list, and will receive your script policy. Alternatively, you can choose to select All users, All devices, or All users and all devices by selecting one of these options in the dropdown box next to Assign to.

    Note

    • Scripts assigned to user groups applies to any user logging in to the Mac.
  6. In Review + add, a summary is shown of the settings you configured. Select Add to save the script. When you select Add, the script policy is deployed to the groups you chose.

The script you created now appears in the list of custom attributes.

Monitor a custom attribute policy

You can monitor the run status of all assigned custom attribute profiles for users and devices by choosing one of the following reports:

  • Custom attributes > select the custom attribute profile to monitor > Device status
  • Custom attributes > select the custom attribute profile to monitor > User status

Important

Shell scripts provided in custom attribute profiles are run every 8 hours on managed Macs and reported.

Once a custom attribute profile runs, it returns one of the following statuses:

  • A status of Failed indicates that the script returned a non-zero exit code or the script is malformed. The error is reported in the Result column.
  • As status of Success indicates that the script returned zero as the exit code. The output echoed by the script is reported in the Result column.

Frequently asked questions

Why are assigned shell scripts not running on the device?

There could be several reasons:

  • The agent might need to check-in to receive new or updated scripts. This check-in process occurs every 8 hours and is different from the MDM check-in. Make sure that the device is awake and connected to a network for a successful agent check-in and wait for the agent to check-in. You can also request the end-user to open Company Portal on the Mac, select the device and click Check settings.
  • The agent may not be installed. Check that the agent is installed at /Library/Intune/Microsoft Intune Agent.app on the macOS device.
  • The agent may not be in a healthy state. The agent will attempt to recover for 24 hours, remove itself and reinstall if shell scripts are still assigned.

How frequently is script run status reported?

Script run status is reported to Microsoft Endpoint Manager Admin Console as soon as script run is complete. If a script is scheduled to run periodically at a set frequency, it only reports status the first time it runs.

When are shell scripts run again?

A script is run again only when the Max number of times to retry if script fails setting is configured and the script fails on run. If the Max number of times to retry if script fails is not configured and a script fails on run, it will not be run again and run status will be reported as failed.

What Intune role permissions are required for shell scripts?

Your assigned-intune role requires Device configurations permissions to delete, assign, create, update, or read shell scripts.

Microsoft Intune management agent for macOS

Why is the agent required?

The Microsoft Intune management agent is necessary to be installed on managed macOS devices in order to enable advanced device management capabilities that are not supported by the native macOS operating system.

How is the agent installed?

The agent is automatically and silently installed on Intune-managed macOS devices that you assign at least one shell script to in Microsoft Endpoint Manager Admin Center. The agent is installed at /Library/Intune/Microsoft Intune Agent.app when applicable and doesn't appear in Finder > Applications on macOS devices. The agent appears as IntuneMdmAgent in Activity Monitor when running on macOS devices.

What does the agent do?

  • The agent silently authenticates with Intune services before checking in to receive assigned shell scripts for the macOS device.
  • The agent receives assigned shell scripts and runs the scripts based on the configured schedule, retry attempts, notification settings, and other settings set by the admin.
  • The agent checks for new or updated scripts with Intune services usually every 8 hours. This check-in process is independent of the MDM check-in.

How can I manually initiate an agent check-in from a Mac?

On a managed Mac that has the agent installed, open Company Portal, select the local device, click on Check settings. This initiates an MDM check-in as well as an agent check-in.

Alternatively, open Terminal, run the sudo killall IntuneMdmAgent command to terminate the IntuneMdmAgent process. The IntuneMdmAgent process will restart immediately, which will initiate a check-in with Intune.

Escape fantasy mac os. Note

The Sync action for devices in Microsoft Endpoint Manager Admin Console initiates an MDM check-in and does not force an agent check-in.

Whelm Mac Os Catalina

When is the agent removed?

There are several conditions that can cause the agent to be removed from the device such as:

  • Shell scripts are no longer assigned to the device.
  • The macOS device is no longer managed.
  • The agent is in an irrecoverable state for more than 24 hours (device-awake time).

Why are scripts running even though the Mac is no longer managed?

When a Mac with assigned scripts is no longer managed, the agent is not removed immediately. The agent detects that the Mac is not managed at the next agent check-in (usually every 8 hours) and cancels scheduled script-runs. So, any locally stored scripts scheduled to run more frequently than the next scheduled agent check-in will run. When the agent is unable to check-in, it retries checking in for up to 24 hours (device-awake time) and then removes itself from the Mac.

How to turn off usage data sent to Microsoft for shell scripts?

To turn off usage data sent to Microsoft from the Intune management agent, open Company Portal and select Menu > Preferences > uncheck 'allow Microsoft to collect usage data'. This will turn off usage data sent for both the agent and Company Portal.

Whelm Mac Os Download

Known issues

  • No script run status: In the unlikely event that a script is received on the device and the device goes offline before the run status is reported, the device will not report run status for the script in the admin console.

Additional information

When you deploy shell scripts or custom attributes for macOS devices from Microsoft Endpoint Manager, it deploys the new universal version of the Intune management agent app that runs natively on Apple Silicon Mac machines. The same deployment will install the x64 version of the app on Intel Mac machines. Rosetta 2 is required to run x64 (Intel) version of apps on Apple Silicon Macs. To install Rosetta 2 on Apple Silicon Macs automatically, you can deploy a shell script in Endpoint Manager. To view a sample script, see Rosetta 2 Installation Script.

Next steps





broken image