Getting to Know Swift Package Manager

Size: px
Start display at page:

Download "Getting to Know Swift Package Manager"

Transcription

1 #WWDC18 Getting to Know Swift Package Manager Session 411 Rick Ballard, SwiftPM Release Manager Boris Buegling, Developer Tools Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

2 Why a package manager for Swift? How to use it The design of SwiftPM Evolution ideas Open source process

3 Why a package manager for Swift? How to use it The design of SwiftPM Evolution ideas Open source process

4 A Cross-Platform Build System for Swift

5 A Cross-Platform Build System for Swift mac OS Ubuntu Future Platforms

6 Canonical Package Management Tool

7 Canonical Package Management Tool mac OS Ubuntu Future Platforms

8 Code Reuse Beyond the Core Libraries Foundation Dispatch XCTest stdlib system

9 Code Reuse Beyond the Core Libraries Foundation Dispatch XCTest stdlib system

10 Take Full Advantage of the Power of Swift

11 Take Full Advantage of the Power of Swift +

12 Part of Swift Open Source Project

13 Included in Swift Toolchains

14 Included with Xcode

15 Why a package manager for Swift? How to use it The design of SwiftPM Evolution ideas Open source process

16 SwiftPM Commands

17 Packages Use Git dc0530 f0a510 fb5294 aadf53

18 Demo Creating your first package

19 Anatomy of a Package Dependencies Products Targets

20 Anatomy of a Package Products Targets Dependencies

21 Anatomy of a Package Targets Products Dependencies

22 Anatomy of a Package Targets Products Dependencies

23 Dependencies

24 Dependencies

25 Dependencies

26 Dependencies

27 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

28 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

29 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

30 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

31 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

32 Targets

33 Targets Depend on Other Targets and Products

34 Targets Depend on Other Targets and Products

35 Products

36 Products

37 Packages Provide Products

38 Packages Provide Products Linkage: Automatic Static Dynamic

39 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

40 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

41 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

42 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

43 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

44 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

45 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

46 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

47 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

48 // swift-tools-version:4.2 import PackageDescription let package = Package( name: "dealer", products: [.library(name: "libdealer", targets: ["libdealer"]),.executable(name: "dealer", targets: ["dealer"]), ], dependencies: [.package(url: "git@github.com:apple/example-package-deckofplayingcards", from: "3.0.0") ], targets: [.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]),.target(name: "dealer", dependencies: ["libdealer"]),.testtarget(name: "dealertests", dependencies: ["libdealer", "dealer"]), ] )

49 Demo Adding dependencies

50 Why a package manager for Swift? How to use It The design of SwiftPM Evolution ideas Open source process

51 Following Swift s Philosophy Safe Fast Expressive

52 Following Swift s Philosophy Safe: isolated build environment Fast Expressive

53 Following Swift s Philosophy Safe: isolated build environment Fast: scalable to large dependency graphs Expressive

54 Following Swift s Philosophy Safe: isolated build environment Fast: scalable to large dependency graphs Expressive: Swift language manifest format

55 The Design of SwiftPM Configuration Dependencies Workflow Building Features Tools Evolution

56 The Design of SwiftPM Configuration Dependencies Workflow Building Features Tools Evolution

57 Swift Language Manifest Format Easy to understand Follows Swift API design guidelines Supported by existing Swift tools

58 Prefer Declarative Syntax // swift-tools-version:4.2 // swift-tools-version:4.2 import PackageDescription let name = generatename() let package = Package( import PackageDescription let package = Package( name: "A", name: name, targets: [ targets: [.target(.target( name: "A", name: name, dependencies: []), dependencies: []),.testtarget(.testtarget( name: "ATests", name: "\(name)tests", dependencies: ["A"]), dependencies: [.target(name: name)]) ] ]) )

59 Specifying Package Source Files Sources dealer main.swift libdealer libdealer.swift

60 Convention versus Configuration Sources products: [ dealer.library(name: "libdealer", targets: ["libdealer"]), main.swift targets: [ libdealer.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]), libdealer.swift

61 Convention versus Configuration Sources products: [ dealer.library(name: "libdealer", targets: ["libdealer"]), main.swift targets: [ libdealer.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]), libdealer.swift

62 Convention versus Configuration Sources products: [ dealer.library(name: "libdealer", targets: ["libdealer"]), main.swift targets: [ libdealer.target(name: "libdealer", dependencies: ["DeckOfPlayingCards"]), libdealer.swift

63 Support for Building Other Languages

64 Support for Building Other Languages

65 The Design of SwiftPM Configuration Dependencies Workflow Building Features Tools Evolution

66 Semantic Versioning semver.org

67 1.2.4 Major Version Breaking changes

68 1.2.4 Minor Version Compatible additions

69 1.2.4 Patch Version Bug fixes

70 Dependency Resolution

71 Direct Dependencies dealer swiftpm.git.exact("0.2.1") deck.git from: "3.0.0"

72 Resolving Versions dealer swiftpm.git tag exact("0.2.1") deck.git tag from: "3.0.0"

73 Resolving Versions dealer swiftpm.git tag deck.git tag from: "3.0.0"

74 Resolving Versions dealer swiftpm.git tag deck.git tag 3.1.4

75 Transitive Dependencies dealer swiftpm.git tag deck.git tag 3.1.4

76 Transitive Dependencies dealer swiftpm.git tag deck.git tag fisher-yates.git from: "2.0.0" playing-card.git uptonextminor: "3.0.0"

77 Transitive Dependencies dealer swiftpm.git tag deck.git tag fisher-yates.git tag from: "2.0.0" playing-card.git tag uptonextminor: "3.0.0"

78 Transitive Dependencies dealer swiftpm.git tag deck.git tag fisher-yates.git tag playing-card.git tag uptonextminor: "3.0.0"

79 Transitive Dependencies dealer swiftpm.git tag deck.git tag fisher-yates.git tag playing-card.git tag 3.0.2

80 Resolving Products libdealer swiftpm.git deck.git fisher-yates.git playing-card.git

81 Resolving Products libdealer swiftpm.git Utility DeckOfPlayingCards deck.git fisher-yates.git FisherYates playing-card.git PlayingCard

82 Package.resolved Resolved Versions File Records resolved package versions Can be shared for dependable build results Easy to update with new version resolution Only used from the top-level package

83 The Design of SwiftPM Configuration Dependencies Workflow Building Features Tools Evolution

84 llbuild SwiftPM s build execution engine Provides fast and correct incremental builds Also used by Xcode s new build system Part of the Swift open source project

85 Build Environment Isolation SwiftPM builds packages in isolation Builds are sandboxed No arbitrary commands or shell scripts

86 Testing

87 Parallel Testing

88 Test Filtering

89 The Design of SwiftPM Configuration Dependencies Workflow Building Features Tools Evolution

90 Edit Mode

91 Edit Mode

92 Branch Dependencies.branch("master") from: "1.0.0".branch("master")

93 Local Package Dependencies

94 The Design of SwiftPM Configuration Dependencies Workflow Building Features Tools Evolution

95 Package.swift Manifest API Evolution Package API can be updated with each new Swift version Previous API is still available Allows using new Swift tools without updating the manifest

96 Swift Tools Version // swift-tools-version:4.2 import PackageDescription let package = Package(, swiftlanguageversions: [.v4_2,.v4])

97 Swift Language Version // swift-tools-version:4.2 import PackageDescription let package = Package(, swiftlanguageversions: [.v4_2,.v4])

98 The Design of SwiftPM Configuration Dependencies Workflow Building Features Tools Evolution

99 Why a package manager for Swift? How to use it The design of SwiftPM Evolution ideas Open source process

100 Open Evolution Process

101 Themes Great integration with other tools Publish and deploy Support complex packages Find, manage, and trust packages

102 Great Integration with Other Tools

103 libswiftpm Available

104 SwiftPM support in developer tools is encouraged!

105 Idea: Machine-Editable Package.swift

106 Idea: Machine-Editable Package.swift + libsyntax

107 Idea: Machine-Editable Package.swift let package = Package( name: "Networking", products: [.library(name: "Networking", targets: ["Networking"]) ], targets: [.target( name: "Networking", dependencies: []), ] )

108 Idea: Machine-Editable Package.swift let package = Package( name: "Networking", products: [.library(name: "Networking", targets: ["Networking"]) ], targets: [.target( name: "Networking", dependencies: ["NetworkCore"]),.target( name: "NetworkCore", dependencies: []), ] )

109 Publish and Deploy

110 Idea: Tagging and Publication Support $ git tag $ git push origin 2.1.9

111 Idea: Automatic Semantic Versioning public func findperson( firstname: String) -> Contact public func findperson( firstname: String, lastname: String) -> Contact 2.0.0

112 Idea: Deployment Automation

113 Idea: Deployment Automation

114 Support Complex Packages

115 Idea: Resources json

116 Idea: Build Settings

117 Idea: Extensible Build Tools Docs DocGen

118 Trust, Manage, and Find Packages

119 Idea: Package Content Verification

120 Idea: Cross-Platform Sandboxing

121 Idea: Fork Support

122 Idea: Package Index AcmeUtils NiftyNetworking YetAnotherProtocol NextGreatThing

123 Deployment Automation Verify Expected Package Content Build Settings Extensible Build Tools Cross-Platform Sandboxing Resources Your Contributions Fork Support Automatic SemVer Machine-Editable Package.swift Tag & Publish Package Index Leverage libswiftpm

124 Why a package manager for Swift? How to use it The design of SwiftPM Evolution ideas Open source process

125

126 Swift Evolution

127 Swift Forums

128 Swift Bug Tracker

129 Swift Bug Tracker Starter Bugs

130 Swift Bug Tracker Starter Bugs

131 Swift Bug Tracker Starter Bugs

132 Swift Continuous please test

133 Trunk Snapshots

134 Growing Community

135 Growing Community

136 Server-Side Swift

137 Server-Side Swift +

138 Command-Line Utilities

139 $ swift package init

140 More Information Swift Open Hours Technology Lab 10 Friday 3:00PM

141

What s New in Xcode App Signing

What s New in Xcode App Signing Developer Tools #WWDC16 What s New in Xcode App Signing Developing and distributing Session 401 Joshua Pennington Tools Engineering Manager Itai Rom Tools Engineer 2016 Apple Inc. All rights reserved.

More information

What s New in Testing

What s New in Testing #WWDC18 What s New in Testing Session 403 Honza Dvorsky, Xcode Engineer Ethan Vaughan, Xcode Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

Using and Extending the Xcode Source Editor

Using and Extending the Xcode Source Editor Developer Tools #WWDC16 Using and Extending the Xcode Source Editor Session 414 Mike Swingler Xcode Infrastructure and Editors Chris Hanson Xcode Infrastructure and Editors 2016 Apple Inc. All rights reserved.

More information

GIT TUTORIAL. Creative Software Architectures for Collaborative Projects CS 130 Donald J. Patterson

GIT TUTORIAL. Creative Software Architectures for Collaborative Projects CS 130 Donald J. Patterson GIT TUTORIAL Creative Software Architectures for Collaborative Projects CS 130 Donald J. Patterson SCM SOFTWARE CONFIGURATION MANAGEMENT SOURCE CODE MANAGEMENT Generic term for the ability to manage multiple

More information

Extending Your Apps with SiriKit

Extending Your Apps with SiriKit App Frameworks #WWDC16 Extending Your Apps with SiriKit Session 225 Vineet Khosla SiriKit Engineering Diana Huang SiriKit Engineering Scott Andrus SiriKit Engineering 2016 Apple Inc. All rights reserved.

More information

Introducing On Demand Resources

Introducing On Demand Resources App Frameworks #WWDC15 Introducing On Demand Resources An element of App Thinning Session 214 Steve Lewallen Frameworks Engineering Tony Parker Cocoa Frameworks 2015 Apple Inc. All rights reserved. Redistribution

More information

Core ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML

Core ML in Depth. System Frameworks #WWDC17. Krishna Sridhar, Core ML Zach Nation, Core ML System Frameworks #WWDC17 Core ML in Depth Krishna Sridhar, Core ML Zach Nation, Core ML 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

Introducing Swift Playgrounds

Introducing Swift Playgrounds Developer Tools #WWDC16 Introducing Swift Playgrounds Exploring with Swift on ipad Session 408 Matt Patenaude Playgrounds Engineer Maxwell Swadling Playgrounds Engineer Jonathan Penn Playgrounds Engineer

More information

What s New in CloudKit

What s New in CloudKit System Frameworks #WWDC15 What s New in CloudKit Session 704 Olivier Bonnet icloud Client Eric Krugler icloud Server 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted

More information

Thread Sanitizer and Static Analysis

Thread Sanitizer and Static Analysis Developer Tools #WWDC16 Thread Sanitizer and Static Analysis Help with finding bugs in your code Session 412 Anna Zaks Manager, Program Analysis Team Devin Coughlin Engineer, Program Analysis Team 2016

More information

Introducing Password AutoFill for Apps

Introducing Password AutoFill for Apps Session App Frameworks #WWDC17 Introducing Password AutoFill for Apps Reducing friction for your users 206 Ricky Mondello, ios Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display

More information

Monetize and Promote Your App with iad

Monetize and Promote Your App with iad Media #WWDC15 Monetize and Promote Your App with iad From design to launch Session 503 Carol Teng Shashank Phadke 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Review Version Control Concepts

Review Version Control Concepts Review Version Control Concepts SWEN-261 Introduction to Software Engineering Department of Software Engineering Rochester Institute of Technology Managing change is a constant aspect of software development.

More information

Building Faster in Xcode

Building Faster in Xcode #WWDC18 Building Faster in Xcode Session 408 David Owens, Xcode Engineer Jordan Rose, Swift Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

platform Development Process Optimization For Drupal centric projects

platform Development Process Optimization For Drupal centric projects platform Development Process Optimization For Drupal centric projects Introduction This document explains how Platform impacts your Drupal centric project development process. Performance data from digital

More information

A New Model for Image Distribution

A New Model for Image Distribution A New Model for Image Distribution Stephen Day Distribution, Tech Lead Docker, Inc. stephen@docker.com @stevvooe github.com/stevvooe Overview Why does this matter? History Docker Registry API V2 Implementation

More information

Creating Great App Previews

Creating Great App Previews Services #WWDC14 Creating Great App Previews Session 304 Paul Turner Sr. Operations Manager itunes Digital Supply Chain Engineering 2014 Apple Inc. All rights reserved. Redistribution or public display

More information

Your Apps and the Future of macos Security

Your Apps and the Future of macos Security #WWDC18 Your Apps and the Future of macos Security Pierre-Olivier Martel, Security Engineering Manager Kelly Yancey, OS Security Garrett Jacobson, Trusted Execution 2018 Apple Inc. All rights reserved.

More information

CocoaHeads Aachen Server-side Swift

CocoaHeads Aachen Server-side Swift Server-side Swift 2016-08-25 Ullrich Platt, Michael Plagge Agenda Motivation for Server-side Swift Concepts / Architecture(s) Pros & Cons Requirements Status In depth: Frameworks Overview Swift@IBM / Kitura

More information

Optimizing Swift Performance Session 409

Optimizing Swift Performance Session 409 Developer Tools #WWDC15 Optimizing Swift Performance Session 409 Nadav Rotem Manager, Swift Performance Team Michael Gottesman Engineer, Swift Performance Team Joe Grzywacz Engineer, Performance Tools

More information

Branching and Merging

Branching and Merging Branching and Merging SWEN-261 Introduction to Software Engineering Department of Software Engineering Rochester Institute of Technology Version control branching supports the ability to manage software

More information

Getting Published in Apple News

Getting Published in Apple News Media #WWDC16 Getting Published in Apple News Session 502 Ryan Griggs Apple News 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple.

More information

Xcode Release Notes. Apple offers a number of resources where you can get Xcode development support:

Xcode Release Notes. Apple offers a number of resources where you can get Xcode development support: Xcode Release Notes This document contains release notes for Xcode 5 developer preview 4. It discusses new features and issues present in Xcode 5 developer preview 4 and issues resolved from earlier Xcode

More information

Localizing with Xcode 9

Localizing with Xcode 9 Session Developer Tools #WWDC17 Localizing with Xcode 9 401 Sara Radi, Software Engineer Aya Siblini, Software Engineer Chris Hanson, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution

More information

PowerShell-Module Documentation. Release docs

PowerShell-Module Documentation. Release docs PowerShell-Module Documentation Release docs December 29, 2016 User Documentation 1 Requirements 3 2 Installation 5 2.1 Option 1: Installer Script......................................... 5 2.2 Option

More information

USING GIT FOR AUTOMATION AND COLLABORATION JUSTIN ELLIOTT - MATT HANSEN PENN STATE UNIVERSITY

USING GIT FOR AUTOMATION AND COLLABORATION JUSTIN ELLIOTT - MATT HANSEN PENN STATE UNIVERSITY USING GIT FOR AUTOMATION AND COLLABORATION JUSTIN ELLIOTT - MATT HANSEN PENN STATE UNIVERSITY AGENDA Version control overview Introduction and basics of Git Advanced Git features Collaboration Automation

More information

Introducing the Modern WebKit API

Introducing the Modern WebKit API Frameworks #WWDC14 Introducing the Modern WebKit API Session 206 Anders Carlsson Safari and WebKit Engineer 2014 Apple Inc. All rights reserved. Redistribution or public display not permitted without written

More information

IBM Case Manager Mobile Version SDK for ios Developers' Guide IBM SC

IBM Case Manager Mobile Version SDK for ios Developers' Guide IBM SC IBM Case Manager Mobile Version 1.0.0.5 SDK for ios Developers' Guide IBM SC27-4582-04 This edition applies to version 1.0.0.5 of IBM Case Manager Mobile (product number 5725-W63) and to all subsequent

More information

Seamless Linking to Your App

Seamless Linking to Your App App Frameworks #WWDC15 Seamless Linking to Your App Session 509 Conrad Shultz Safari and WebKit Software Engineer Jonathan Grynspan Core Services Software Engineer 2015 Apple Inc. All rights reserved.

More information

Swift Web Applications on the AWS Cloud

Swift Web Applications on the AWS Cloud Swift Web Applications on the AWS Cloud Quick Start Reference Deployment November 2016 Asif Khan, Tom Horton, and Tony Vattathil Solutions Architects, Amazon Web Services Contents Overview... 2 Architecture...

More information

UCT Application Development Lifecycle. UCT Business Applications

UCT Application Development Lifecycle. UCT Business Applications UCT Business Applications Page i Table of Contents Planning Phase... 1 Analysis Phase... 2 Design Phase... 3 Implementation Phase... 4 Software Development... 4 Product Testing... 5 Product Implementation...

More information

Automation with Meraki Provisioning API

Automation with Meraki Provisioning API DEVNET-2120 Automation with Meraki Provisioning API Courtney M. Batiste, Solutions Architect- Cisco Meraki Cisco Spark How Questions? Use Cisco Spark to communicate with the speaker after the session 1.

More information

Treating Deployments as Code with Puppet and the Atlassian Toolsuite Puppet Camp, Geneva

Treating Deployments as Code with Puppet and the Atlassian Toolsuite Puppet Camp, Geneva Treating Deployments as Code with Puppet and the Atlassian Toolsuite Christoph Leithner Who is celix? Puppet Labs Partner Atlassian Expert IT Service Management (ITSM) Continuous Deployment und DevOps

More information

Version Control. Second level Third level Fourth level Fifth level. - Software Development Project. January 17, 2018

Version Control. Second level Third level Fourth level Fifth level. - Software Development Project. January 17, 2018 Version Control Click to edit Master EECS text 2311 styles - Software Development Project Second level Third level Fourth level Fifth level January 17, 2018 1 But first, Screen Readers The software you

More information

Creating Extensions for ios and OS X, Part Two

Creating Extensions for ios and OS X, Part Two Frameworks #WWDC14 Creating Extensions for ios and OS X, Part Two Architecture Session 217 Damien Sorresso Overloaded Operator 2014 Apple Inc. All rights reserved. Redistribution or public display not

More information

Recap: Developer's Environment

Recap: Developer's Environment Recap: Developer's Environment There's no audio yet. We'll start at 2PM (Eastern Time). Standardizing Your Test Environment VirtualBox -> machine inside a machine the oracle thing Chef -> configuration

More information

Implementing UI Designs in Interface Builder

Implementing UI Designs in Interface Builder Developer Tools #WWDC15 Implementing UI Designs in Interface Builder Session 407 Kevin Cathey Interface Builder Engineer Tony Ricciardi Interface Builder Engineer 2015 Apple Inc. All rights reserved. Redistribution

More information

New UIKit Support for International User Interfaces

New UIKit Support for International User Interfaces App Frameworks #WWDC15 New UIKit Support for International User Interfaces Session 222 Sara Radi Internationalization Software Engineer Aaltan Ahmad Internationalization Software Engineer Paul Borokhov

More information

What s New in the LLVM Compiler. Chris Lattner LLVM Chief Architect

What s New in the LLVM Compiler. Chris Lattner LLVM Chief Architect What s New in the LLVM Compiler Chris Lattner LLVM Chief Architect 2 Apple Compiler Evolution Renovating the Apple compiler landscape Phasing out GCC-based tools Driving innovation in LLVM-based technologies

More information

Movie Explorer. Group Members: Name: Chen Wang JHED: cwang107 Section: 415 Name: Yang Xi JHED: yxi5 Section: 415. Domain Description:

Movie Explorer. Group Members: Name: Chen Wang JHED: cwang107 Section: 415 Name: Yang Xi JHED: yxi5 Section: 415. Domain Description: Movie Explorer Database Project (Phase II) Group Members: Name: Chen Wang JHED: cwang107 Section: 415 Name: Yang Xi JHED: yxi5 Section: 415 Domain Description: We are trying to build a movie explorer system

More information

swiftenv Documentation

swiftenv Documentation swiftenv Documentation Release 1.3.0 Kyle Fuller Sep 27, 2017 Contents 1 The User Guide 3 1.1 Installation................................................ 3 1.2 Getting Started..............................................

More information

Xcode Release Notes. Apple offers a number of resources where you can get Xcode development support:

Xcode Release Notes. Apple offers a number of resources where you can get Xcode development support: Xcode Release Notes This document contains release notes for Xcode 5 developer preview 5. It discusses new features and issues present in Xcode 5 developer preview 5 and issues resolved from earlier Xcode

More information

Software configuration management

Software configuration management Software Engineering Theory Software configuration management Lena Buffoni/ Kristian Sandahl Department of Computer and Information Science 2017-03-27 2 Maintenance Requirements System Design (Architecture,

More information

2/9/2013 LAB OUTLINE INTRODUCTION TO VCS WHY VERSION CONTROL SYSTEM(VCS)? II SENG 371 SOFTWARE EVOLUTION VERSION CONTROL SYSTEMS

2/9/2013 LAB OUTLINE INTRODUCTION TO VCS WHY VERSION CONTROL SYSTEM(VCS)? II SENG 371 SOFTWARE EVOLUTION VERSION CONTROL SYSTEMS SENG 371 SOFTWARE EVOLUTION LAB OUTLINE Introduction to Version Control Systems VERSION CONTROL SYSTEMS Subversion Git and Github 1 Prepared by Pratik Jain 2 INTRODUCTION TO VCS A version control system

More information

Integrating Apps and Content with AR Quick Look

Integrating Apps and Content with AR Quick Look Session #WWDC18 Integrating Apps and Content with AR Quick Look 603 David Lui, ARKit Engineering Dave Addey, ARKit Engineering 2018 Apple Inc. All rights reserved. Redistribution or public display not

More information

Understanding Undefined Behavior

Understanding Undefined Behavior Session Developer Tools #WWDC17 Understanding Undefined Behavior 407 Fred Riss, Clang Team Ryan Govostes, Security Engineering and Architecture Team Anna Zaks, Program Analysis Team 2017 Apple Inc. All

More information

Getting the Most out of Playgrounds in Xcode

Getting the Most out of Playgrounds in Xcode #WWDC18 Getting the Most out of Playgrounds in Xcode Session 402 Tibet Rooney-Rabdau, Xcode Engineer Alex Brown, Core OS Engineer TJ Usiyan, Xcode Engineer 2018 Apple Inc. All rights reserved. Redistribution

More information

2/8/18. Overview. Project Management. The First Law. What is Project Management? What Are These Changes? Software Configuration Management (SCM)

2/8/18. Overview. Project Management. The First Law. What is Project Management? What Are These Changes? Software Configuration Management (SCM) Overview Project Management How to manage a project? What is software configuration management? Version control systems Issue tracking systems N. Meng, L. Zhang 2 What is Project Management? Effective

More information

Azure DevOps. Randy Pagels Intelligent Cloud Technical Specialist Great Lakes Region

Azure DevOps. Randy Pagels Intelligent Cloud Technical Specialist Great Lakes Region Azure DevOps Randy Pagels Intelligent Cloud Technical Specialist Great Lakes Region What is DevOps? People. Process. Products. Build & Test Deploy DevOps is the union of people, process, and products to

More information

Signals Documentation

Signals Documentation Signals Documentation Release 0.1 Yeti November 22, 2015 Contents 1 Quickstart 1 2 What is Signals? 3 3 Contents 5 3.1 Get Started................................................ 5 3.2 Try the Demo Server...........................................

More information

Managing Documents In Your ios Apps

Managing Documents In Your ios Apps Session #WWDC18 Managing Documents In Your ios Apps 216 Brandon Tennant, Software Engineer Thomas Deniau, Software Engineer Rony Fadel, Software Engineer 2018 Apple Inc. All rights reserved. Redistribution

More information

Advanced Debugging and the Address Sanitizer

Advanced Debugging and the Address Sanitizer Developer Tools #WWDC15 Advanced Debugging and the Address Sanitizer Finding your undocumented features Session 413 Mike Swingler Xcode UI Infrastructure Anna Zaks LLVM Program Analysis 2015 Apple Inc.

More information

Introduction to Siri Shortcuts

Introduction to Siri Shortcuts #WWDC8 Introduction to Siri Shortcuts Session 2 Ari Weinstein, Siri Willem Mattelaer, Siri 208 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Project Management. Overview

Project Management. Overview Project Management Overview How to manage a project? What is software configuration management? Version control systems Issue tracking systems N. Meng, L. Zhang 2 1 What is Project Management? Effective

More information

Building Apps with Dynamic Type

Building Apps with Dynamic Type Session App Frameworks #WWDC17 Building Apps with Dynamic Type 245 Clare Kasemset, Software Engineering Manager Nandini Sundar, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or

More information

Git and Gerrit Workflows. Enforcing Manual & Automated Review

Git and Gerrit Workflows. Enforcing Manual & Automated Review Git and Gerrit Workflows Enforcing Manual & Automated Review Agenda Branching and Workflow Review A Look at Gerrit The Gerrit Workflow Other Workflows Customizing Gerrit Workflow Branching and Workflow

More information

Building Visually Rich User Experiences

Building Visually Rich User Experiences Session App Frameworks #WWDC17 Building Visually Rich User Experiences 235 Noah Witherspoon, Software Engineer Warren Moore, Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public

More information

Newly-Created, Work-in-Progress (WIP), Approval Cycle, Approved or Copied-from-Previously-Approved, Work-in-Progress (WIP), Approval Cycle, Approved

Newly-Created, Work-in-Progress (WIP), Approval Cycle, Approved or Copied-from-Previously-Approved, Work-in-Progress (WIP), Approval Cycle, Approved A New Approach to Enterprise Data Organization A Cuboid Enterprises are generally overwhelmed with data, making the ability to store, process, analyze, interpret, consume, and act upon that data a primary

More information

McAfee VirusScan and McAfee epolicy Orchestrator Administration Course

McAfee VirusScan and McAfee epolicy Orchestrator Administration Course McAfee VirusScan and McAfee epolicy Orchestrator Administration Course Education Services administration course training The McAfee VirusScan Enterprise and McAfee epolicy Orchestrator (McAfee epo ) Administration

More information

Porting Objective-C to Swift. Richard Ekle

Porting Objective-C to Swift. Richard Ekle Porting Objective-C to Swift Richard Ekle rick@ekle.org Why do we need this? 1.2 million apps in the ios App Store http://www.statista.com/statistics/276623/numberof-apps-available-in-leading-app-stores/

More information

Accelerate OpenStack* Together. * OpenStack is a registered trademark of the OpenStack Foundation

Accelerate OpenStack* Together. * OpenStack is a registered trademark of the OpenStack Foundation Accelerate OpenStack* Together * OpenStack is a registered trademark of the OpenStack Foundation Considerations to Build a Production OpenStack Cloud Ruchi Bhargava, Intel IT Shuquan Huang, Intel IT Kai

More information

Managing Network Configurations with Git and GitLab

Managing Network Configurations with Git and GitLab Managing Network Configurations with Git and GitLab Matthew DeNapoli Developer Advocate, DevNet Twitter: @thedenap Season 1, Workshop 3 https://developer.cisco.com/netdevops/live What are we going to talk

More information

Cisco Network Programmability for the Enterprise NPEN v1.0

Cisco Network Programmability for the Enterprise NPEN v1.0 Course Overview This course teaches how to automate common Cisco enterprise platforms such as IOS-XE and IOS-XR routers as well as ASA firewalls. This course also includes coverage of the automation capabilities

More information

AVContentKeySession Best Practices

AVContentKeySession Best Practices Session #WWDC18 AVContentKeySession Best Practices 507 Anil Katti, AVFoundation Engineer 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from

More information

Welcome! Virtual tutorial will start at 15:00 GMT. Please leave feedback afterwards at:

Welcome! Virtual tutorial will start at 15:00 GMT. Please leave feedback afterwards at: Welcome! Virtual tutorial will start at 15:00 GMT Please leave feedback afterwards at: www.archer.ac.uk/training/feedback/online-course-feedback.php Introduction to Version Control (Part 2) ARCHER Virtual

More information

Lab Objective. Lab Assignment. Downloads and Installation

Lab Objective. Lab Assignment. Downloads and Installation How I Start Working with Git: Git Lab 01 Adapted from: (1) https://github.com/quantstack/xeus-cling (2) https://code.visualstudio.com/docs/languages/cpp Lab Objective 1. Installing and using VS Code 2.

More information

James Turnbull

James Turnbull State of the Nation James Turnbull james@puppetlabs.com Where we were Puppet user mailing list membership was 3000 With about 600 messages a month The #puppet IRC channel averaged 400 people Puppet on

More information

Profiling in Depth. Do you know where your code is? Session 412. Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer

Profiling in Depth. Do you know where your code is? Session 412. Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer Developer Tools #WWDC15 Profiling in Depth Do you know where your code is? Session 412 Kris Markel Performance Tools Engineer Chad Woolf Performance Tools Engineer 2015 Apple Inc. All rights reserved.

More information

Git - A brief overview

Git - A brief overview breno.leitao@gmail.com Linux Technology Center May 16, 2008 Agenda Introduction Concepts Commands (Tutorial) Front Ends History Started in 2005 to replace BitKeeper. Designed to support the kernel development.

More information

Improving the Magento 2 Developer Experience

Improving the Magento 2 Developer Experience Improving the Magento 2 Developer Experience Alan Kent Magento Chief Architect Consistent Magento 2 Feedback I have been working on some larger Magento 2.1 EE solutions for a few months now and I really

More information

Cisco Modelling Labs Lessons from a Virtual World

Cisco Modelling Labs Lessons from a Virtual World Cisco Modelling Labs Lessons from a Virtual World Joel Obstfeld Distinguished Engineer Network Virtualisation The challenge - How do you deploy new services, make changes, or troubleshoot in the live network

More information

Open2Test Test Automation Framework for SilkTest - Usage Guidelines

Open2Test Test Automation Framework for SilkTest - Usage Guidelines for SilkTest - Usage Guidelines Version 1.0 January 2010 D I S C L A I M E R Verbatim copying and distribution of this entire article is permitted worldwide, without royalty, in any medium, provided this

More information

Content Protection for HTTP Live Streaming

Content Protection for HTTP Live Streaming Media #WWDC15 Content Protection for HTTP Live Streaming Session 502 Roger Pantos HTTP Live Streaming Engineer 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Version Control for PL/SQL

Version Control for PL/SQL Version Control for PL/SQL What is the problem? How did we solve it? Implementation Strategies Demo!! Customer Spotlight Success Story: (In other words, this really works. :-) ) Rhenus Logistics, leading

More information

Richard Mallion. Swift for Admins #TEAMSWIFT

Richard Mallion. Swift for Admins #TEAMSWIFT Richard Mallion Swift for Admins #TEAMSWIFT Apple Introduces Swift At the WWDC 2014 Keynote, Apple introduced Swift A new modern programming language It targets the frameworks for Cocoa and Cocoa Touch

More information

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer

What s New in tvos #WWDC16. App Frameworks. Session 206. Hans Kim tvos Engineer App Frameworks #WWDC16 What s New in tvos Session 206 Hans Kim tvos Engineer 2016 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission from Apple. Welcome

More information

SharePoint 2013 Central Administration

SharePoint 2013 Central Administration Course Objectives SharePoint 2013 Central Administration SharePoint Virtual environment creation through VMware, Virtual Box & Hyper-V. SharePoint Farm setup - Standalone, Small, Medium and Large Scale

More information

What s New in Swift Playgrounds

What s New in Swift Playgrounds Session Developer Tools #WWDC17 What s New in Swift Playgrounds 408 Connor Wakamo, Playgrounds Engineer Grace Kendall, Playgrounds Engineer Najla Bulous, Playgrounds Engineer 2017 Apple Inc. All rights

More information

Advances in TVMLKit. App Frameworks #WWDC17. Trevor Cortez, Localization Engineer Parry Panesar, tvos Engineer Jeremy Foo, tvos Engineer

Advances in TVMLKit. App Frameworks #WWDC17. Trevor Cortez, Localization Engineer Parry Panesar, tvos Engineer Jeremy Foo, tvos Engineer Session App Frameworks #WWDC17 Advances in TVMLKit 202 Trevor Cortez, Localization Engineer Parry Panesar, tvos Engineer Jeremy Foo, tvos Engineer 2017 Apple Inc. All rights reserved. Redistribution or

More information

Azure Day Application Development. Randy Pagels Sr. Developer Technology Specialist US DX Developer Tools - Central Region

Azure Day Application Development. Randy Pagels Sr. Developer Technology Specialist US DX Developer Tools - Central Region Azure Day Application Development Randy Pagels Sr. Developer Technology Specialist US DX Developer Tools - Central Region Azure App Service.NET, Java, Node.js, PHP, Python Auto patching Auto scale Integration

More information

COSC345 Software Engineering. Version Control

COSC345 Software Engineering. Version Control COSC345 Software Engineering Version Control Some Problems Communications File system problems Version control Basic principles and use Outline When to use version control Examples SCCS RCS Subversion

More information

Con. Continuous Integration

Con. Continuous Integration Con Continuous Integration Table of Contents Slide 1 Slide 2 Slide 3 Slide 4 Slide 5 What is Continuous Integration (CI)? The benefits of CI The CI landscape Why should I care about CI? Mock Scenario +

More information

Data Delivery with Drag and Drop

Data Delivery with Drag and Drop Session App Frameworks #WWDC17 Data Delivery with Drag and Drop 227 Dave Rahardja, UIKit Tanu Singhal, UIKit 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without

More information

Xcode 6 Start to Finish

Xcode 6 Start to Finish Xcode 6 Start to Finish ios and OS X Development Fritz Anderson VAddison-Wesley New York Boston Indianapolis San Francisco Toronto Montreal Capetown Sydney London Munich Paris Madrid Tokyo Singapore Mexico

More information

Technical Architecture & Analysis

Technical Architecture & Analysis Technical Architecture & Analysis HS2 Technical Architecture & Analysis 15 October 2012 Anton Palitsyn 020 7426 8920 anton.palitsyn@precedent.co.uk Contents Contents... 2 Document info... 3 Authors...

More information

Building for Voice with Siri Shortcuts

Building for Voice with Siri Shortcuts #WWDC18 Building for Voice with Siri Shortcuts Session 214 Amit Jain, Siri Ayaka Nonaka, Siri 2018 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Selenium Open Source Test Automation Framework Usage Guidelines

Selenium Open Source Test Automation Framework Usage Guidelines Version 0.1 September 2009 DISCLAIMER Verbatim copying and distribution of this entire article is permitted worldwide, without royalty, in any medium, provided this notice is preserved. Table of Contents

More information

Enabling Your App for CarPlay

Enabling Your App for CarPlay Session App Frameworks #WWDC17 Enabling Your App for CarPlay 719 Albert Wan, CarPlay Engineering 2017 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

SALOME Maintenance Procedure. Frédéric Pons (Open Cascade) Roman Nikolaev (Open Cascade)

SALOME Maintenance Procedure. Frédéric Pons (Open Cascade) Roman Nikolaev (Open Cascade) SALOME Maintenance Procedure Frédéric Pons (Open Cascade) Roman Nikolaev (Open Cascade) Back Office Back Office Organization Back Office Tasks Continuous integration Production and Qualification of Released

More information

Adding mobile applications

Adding mobile applications Adding mobile applications This section describes how to add, configure, and deploy mobile applications for Android, ios, and Mac OS X. You can deploy custom applications as well as applications purchased

More information

Microsoft SharePoint Server

Microsoft SharePoint Server Developing Microsoft SharePoint Server 2013 Core Solutions Course: 20488 Course Details Audience(s): Developers Technology: Duration: Microsoft SharePoint Server 40 Hours ABOUT THIS COURSE In this course,

More information

Accessibility on OS X

Accessibility on OS X Frameworks #WWDC14 Accessibility on OS X New Accessibility API Session 207 Patti Hoa Accessibility Engineer! Chris Dolan Accessibility Engineer 2014 Apple Inc. All rights reserved. Redistribution or public

More information

contribution-guide.org Release

contribution-guide.org Release contribution-guide.org Release August 06, 2018 Contents 1 About 1 1.1 Sources.................................................. 1 2 Submitting bugs 3 2.1 Due diligence...............................................

More information

Advanced Scrollviews and Touch Handling Techniques

Advanced Scrollviews and Touch Handling Techniques Frameworks #WWDC14 Advanced Scrollviews and Touch Handling Techniques Session 235 Josh Shaffer ios Apps and Frameworks Engineer Eliza Block ios Apps and Frameworks Engineer 2014 Apple Inc. All rights reserved.

More information

Designing for Apple Watch

Designing for Apple Watch Design #WWDC15 Designing for Apple Watch Session 802 Mike Stern User Experience Evangelist 2015 Apple Inc. All rights reserved. Redistribution or public display not permitted without written permission

More information

Localization Best Practices on tvos

Localization Best Practices on tvos Session App Frameworks #WWDC17 Localization Best Practices on tvos 248 Joaquim Lobo Silva, Internationalization Software Engineer 2017 Apple Inc. All rights reserved. Redistribution or public display not

More information

What s New in Notifications

What s New in Notifications System Frameworks #WWDC15 What s New in Notifications Session 720 Michele Campeotto ios Notifications Gokul Thirumalai Apple Push Notification Service 2015 Apple Inc. All rights reserved. Redistribution

More information

Developing Microsoft SharePoint Server 2013 Core Solutions

Developing Microsoft SharePoint Server 2013 Core Solutions Developing Microsoft SharePoint Server 2013 Core Solutions 20488B; 5 days, Instructor-led Course Description In this course, students learn core skills that are common to almost all SharePoint development

More information

Software Development. Using GIT. Pr. Olivier Gruber. Laboratoire d'informatique de Grenoble Université de Grenoble-Alpes

Software Development. Using GIT. Pr. Olivier Gruber. Laboratoire d'informatique de Grenoble Université de Grenoble-Alpes Software Development 1 Using GIT Pr. Olivier Gruber olivier.gruber@imag.fr Laboratoire d'informatique de Grenoble Université de Grenoble-Alpes Overview 2 What is GIT Keeping histories of the evolution

More information

Honours/Master/PhD Thesis Projects Supervised by Dr. Yulei Sui

Honours/Master/PhD Thesis Projects Supervised by Dr. Yulei Sui Honours/Master/PhD Thesis Projects Supervised by Dr. Yulei Sui Projects 1 Information flow analysis for mobile applications 2 2 Machine-learning-guide typestate analysis for UAF vulnerabilities 3 3 Preventing

More information