{"text_format":"2","workbook":"xls","n_sheets":1,"sheets":["report2"],"not_rendered":{"charts":0,"images":0,"macros":0,"external_links":1,"defined_names":1,"comments":0,"pivot_tables":0},"unopened":[],"bounds":{"document_bytes":16777216,"sheet_cells":100000,"run_cost":"one","rows_first":2000,"rows_last":500,"rows_between":2000,"halvings":0,"cell_chars":16384,"cell_head_chars":4096},"cells_cut":0,"cells_raw":0,"read":"whole","date_system":"1900","formulas":"cached_only"}

{"sheet":"report2","index":0,"n_rows":16,"n_cols":5,"rows_kept":16,"cut":false,"hidden":false,"merged":[[0,2,0,3],[0,4,0,5],[1,2,1,3],[1,4,1,5],[2,2,2,3],[2,4,2,5],[3,2,3,3],[5,2,5,3],[6,2,6,3],[7,2,7,3],[8,2,8,3],[9,2,9,3],[10,2,10,3],[12,2,12,3]],"flags":["formulas_cached_only"]}
[null,"1.","Record Nr.",null,"UNINA9910484528303321"]
[null,null,"Autore",null,"Tsadok Avi"]
[null,null,"Titolo",null,"Mastering Swift package manager : build and test modular apps using Xcode / / Avi Tsadok"]
[null,null,"Pubbl/distr/stampa",null,"[Place of publication not identified] : , : Apress, , [2021]"]
[{"$nulls":4},"©2021"]
[null,null,"ISBN",null,"1-4842-7049-5"]
[null,null,"Descrizione fisica",null,"1 online resource (214 pages)"]
[null,null,"Disciplina",null,"005.133"]
[null,null,"Soggetti",null,"Swift (Computer program language)"]
[null,null,"Lingua di pubblicazione",null,"Inglese"]
[null,null,"Formato",null,"Materiale a stampa"]
[null,null,null,"Livello bibliografico","Monografia"]
[null,null,"Nota di contenuto",null,"Intro -- Table of Contents -- About the Author -- About the Technical Reviewer -- Chapter 1: Introduction -- Personal View -- The Future by Apple -- About This Book -- Chapter 2: Organized Mess -- Meet \"Weathery\" -- The Weathery Project -- Code Organization -- Separation of Concerns -- Presentation, Business, and Services -- It All Starts with Data Flow -- The Three-Layer Architecture -- Problems to Mini Problems -- Stability -- Teamwork -- Build Time -- Redesign Our App Architecture -- Take a Paper and Draw a UML -- Do This in Collaboration -- Relations Between Components -- What Side to Start? -- Opened and Closed Layers -- Define Design Patterns -- Define Your Entities -- Define Your Interfaces -- Summary -- Chapter 3: Swift Package to Rescue -- In the Meeting Room -- Let's Start with Terminology -- Module -- Library -- Framework -- Swift Package -- Code Location -- Dependencies -- Platform and System Version -- Versioning -- Create Our First Package -- Create a Package from the Command Line -- Xcode 11 and Swift Packages -- Package.swift -- Swift Tools and PackageDescription -- Products and Targets -- Naming -- What Are We Naming? -- Be Consistent -- Be Meaningful -- Be Unique -- Platforms -- Dependencies -- Working on Our Package -- Building -- Building from Xcode -- Creating a New Package from Xcode -- Summary -- Chapter 4: Design and Link Our First Package -- What Do We Do Next? -- Linking the Package Libraries -- Think As a Service Provider -- Design a Good API -- Think About the Developer As a Naïve One -- Access Control -- Private -- fileprivate -- Open/Public -- Parameters, Return Type, and Properties in Public Access Level -- Public Constructor -- Access Level in Testing "]
[{"$nulls":4},"-- Scenario-Driven Design -- Three Different Ways Produce Three Different Experiences -- Inout Parameter -- Naming -- Clarity -- Consistency -- Class/Protocol Names."]
[{"$nulls":4},"Method Names -- Comments -- Rendered Documentation -- The Basics -- Discussion and Summary -- Parameters, Returns, and Throws -- Code Blocks -- More Special Fields -- Document Classes, Structs, and Enum -- Summary -- Chapter 5: All About Dependencies -- A Utils Package -- Code Coupling -- Why Code Coupling Matters? -- Types of Coupling -- Structural Dependencies -- Inheritance -- Aggregation -- Usage -- Fan-Out Similarity -- Fan-Out Similarity with Inheritance -- Logical Coupling -- Dependencies Between Packages -- A Version-Based Requirement -- Semantic Versioning Standard -- Control Our Dependencies' Update -- Branch-/Commit-Based Requirement -- A Local Dependency -- Project's Remote Dependencies -- Some Best Practices About Dependencies -- Reducing Coupling Level -- Dependency Injection -- Using Closures -- The Responsibility Is on the App -- Summary -- Chapter 6: And Sharing for All -- Sharing Options -- Sharing Using a Public Git Repo -- There Is No Support for Multipackage Repositories -- Versioning -- Remember Semantic Versioning Standard? -- Testing -- Remember, Public Is Public -- Distribute Your Package -- Readme.md File -- Readme.md File Location and Formatting -- Readme.md Markdown Formatting -- Readme.md Best Practices -- Adding Pictures and Animations -- Private Git Repository -- What Is the Problem Exactly? -- Personal Access Token -- Generating New Token in Git -- The Problem with Personal Access Token -- Using SSH -- What Is SSH Connection? -- Generating SSH Keys -- Editing SSH Config File -- Adding the Keys to the Agent -- Adding the Public Key to GitHub -- Going Back to the Package.swift File -- Other Machines -- The Monorepo Solution -- What Is a Monorepo? -- Dependencies' Management Can Be Simpler -- Cross-Project Changes Are Easier -- How to Move Forward with Only One Project? -- Monorepo Also Has Disadvantages."]
[{"$nulls":4},"Solutions to Monorepo Issues -- Disassemble Your Monorepo -- Summary -- Chapter 7: Testing Is Caring -- Swift Packages and Testing -- The Importance of Testing -- The Package.swift File -- Our First XCTestCase -- @importable Import -- allTests Variable -- Adding More Test Methods -- Test Methods Start with \"test\" -- Arrange ➤ Act ➤ Assert -- Running Tests -- Straight from the Code Editor -- Running Tests from the Test Navigator -- Adding/Removing Tests from Our Scheme -- Running from Terminal -- Integration Tests -- Why Are Integration Tests Important? -- Setup Integration Tests with Swift Packages -- Link a Package to the Test Target -- Summary -- Chapter 8: Spicing Up with Resources -- Why Do We Need That? -- Swift Tools 5.3 -- So How Do I Add Resources? -- Bundles -- Does a Swift Package Have a Bundle? -- Access the Package Bundle from Code -- Access Package Resources from the Main App and Vice Versa -- Explicitly Declare Resources -- Adding a Whole Folder of Resources -- Process vs. Copy -- Exclude Resources -- Localization -- \"defaultLocalization\" Property -- \"lproj\" Folders -- Process -- Explicitly Declare Files Outside lproj Folders -- Provides Localization Texts with Dependency Injection -- Summary -- Chapter 9: XCFrameworks -- Swift Package Downsides -- Meet XCFrameworks -- XCFramework Creation -- Start a New Project -- Archive the Framework -- The xcodebuild Command -- The Output -- Create XCFramework -- The Swift Package Connection -- Creating a Binary Target -- Local Path -- Using URL -- Summary -- Index."]