Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

XebiCon'16 : Server-Side Swift. Par Simone Civetta, Développeur iOS chez Xebia

148 views

Published on

Quand Swift a été annoncé en 2014, personne n'aurait imaginé qu'un jour on aurait pu se servir de ce langage pour réaliser une application... côté serveur ! En ouvrant les sources de Swift, (En rendant Swift Open-Source ?), Apple apporte aux développeurs une nouvelle façon d’imaginer leurs développements, en leur donnant accès aux applications Web. Nous passerons en revue les forces et faiblesses de la proposition d’Apple, de découvrir comment coder des applicatifs back, les déployer dans le cloud ou encore comment Swift se positionne face à ses concurrents directs.

Published in: Technology

XebiCon'16 : Server-Side Swift. Par Simone Civetta, Développeur iOS chez Xebia

  1. 1. 1
  2. 2. Salut 2
  3. 3. Simone Civetta 3
  4. 4. Je suis un développeur iOS 4
  5. 5. 6ans 5
  6. 6. 6
  7. 7. 3,5ans 7
  8. 8. 8
  9. 9. 9
  10. 10. 10
  11. 11. 11
  12. 12. 12
  13. 13. 13
  14. 14. Enfin... 14
  15. 15. Plan➀ Les Origines ➁ État de l'art ➂ Pourquoi l'utiliser ? ➃ Swift Server dans la vraie vie ➄ Évolutions 15
  16. 16. 1. Les origines 16
  17. 17. 17
  18. 18. 18
  19. 19. Pourquoi Open Source ? 19
  20. 20. 20
  21. 21. 21
  22. 22. 22
  23. 23. 23
  24. 24. 2. État de l'art 24
  25. 25. Swift 3 25
  26. 26. 1.0 26
  27. 27. 1.1 27
  28. 28. 1.2 28
  29. 29. 2.0 29
  30. 30. 2.1 30
  31. 31. 2.2 31
  32. 32. 2.3 32
  33. 33. Swift 3 33
  34. 34. 1 version tous les 3,42 mois 34
  35. 35. Un langage complet 35
  36. 36. 36
  37. 37. 37
  38. 38. 38
  39. 39. 39
  40. 40. 40
  41. 41. Bibliothèques tierces 41
  42. 42. Bibliothèques tierces stables 42
  43. 43. 43
  44. 44. 44
  45. 45. 45
  46. 46. Bibliothèques C 46
  47. 47. Web Frameworks47
  48. 48. 48
  49. 49. 49
  50. 50. 50
  51. 51. 51
  52. 52. 52
  53. 53. Swift Package Manager 53
  54. 54. SPM swift package init swift package fetch swift package update swift package generate-xcodeproj 54
  55. 55. Swift Package Catalog 55
  56. 56. 56
  57. 57. 57
  58. 58. 58
  59. 59. Quelques images Docker ☞ swiftdocker/swift/ ☞ ibmcom/kitura-ubuntu/ ☞ zewo/todobackend/ 59
  60. 60. Code Quality60
  61. 61. 61
  62. 62. 62
  63. 63. 63
  64. 64. 64
  65. 65. Metriques de qualité Pour en savoir plus... speakerdeck.com/viteinfinite/be-the-quality-you-want-to-see-in- your-app-swift-edition 65
  66. 66. 66
  67. 67. 👍 67
  68. 68. Enfin... 68
  69. 69. 3. Pourquoi l'utiliser ? 69
  70. 70. Développement actif70
  71. 71. 71
  72. 72. 72
  73. 73. 73
  74. 74. 74
  75. 75. 75
  76. 76. 76
  77. 77. Performance 77
  78. 78. Performance 78
  79. 79. Performance 79
  80. 80. Memory Source: http://benchmarksgame.alioth.debian.org 80
  81. 81. Applications isomorphes 81
  82. 82. 4. Dans la vraie vie 82
  83. 83. Package.swift import PackageDescription let package = Package( name: "xebicon", dependencies: [ .Package(url: "https://github.com/IBM-Swift/Swift-cfenv.git", majorVersion: 1, minor: 7), .Package(url: "https://github.com/IBM-Swift/Kitura.git", majorVersion: 1, minor: 0), .Package(url: "https://github.com/feinstruktur/CRabbitMQ", majorVersion: 1) ]) 83
  84. 84. Serveur HTTP import Kitura let appEnv = try! CloudFoundryEnv.getAppEnv() let router = Router() router.post("/vote/station", handler: { request, response, next in do { try processVoteRequest(request) } catch { debugPrint(error) response.send(status: .badRequest) } next() }) Kitura.addHTTPServer(onPort: appEnv.port, with: router) Kitura.run() 84
  85. 85. Build $ swift build Linking CHTTPParser Compile Swift Module 'Socket' (3 sources) Compile Swift Module 'HeliumLogger' (1 sources) Compile Swift Module 'SwiftyJSON' (2 sources) Compile Swift Module 'SSLService' (1 sources) Compile Swift Module 'KituraNet' (29 sources) Compile Swift Module 'CloudFoundryEnv' (7 sources) Compile Swift Module 'Kitura' (40 sources) Compile Swift Module 'xebicon' (12 sources) Linking ./.build/debug/xebicon 85
  86. 86. Bilbliothèques C func publish(message: String, exchange: String, key: String) throws { guard let connection = self.connection else { throw AMQPConnectorError.notConnected } amqp_basic_publish(connection, Constants.defaultChannel, amqp_cstring_bytes(exchange), amqp_cstring_bytes(key), 0, 0, nil, amqp_cstring_bytes(message)) } 86
  87. 87. Déploiement avec CloudFoundry cf push XebiconVote 87
  88. 88. 88
  89. 89. Tests func testPostVote() { let router = HTTPController().router performServerTest(router) { expectation in self.performRequest("post", path: "vote/station", requestModifier: { request in request.write(from: "{" + ""trainId": 1," + ""media": "MOBILE"," + ""userId": "23de45f"" + "}") }) { response in XCTAssertEqual(response!.statusCode, HTTPStatusCode.OK) expectation.fulfill() } } } 89
  90. 90. Tout s'est bien passé™ 90
  91. 91. Enfin... 91
  92. 92. 92
  93. 93. 93
  94. 94. ARC94
  95. 95. 95
  96. 96. Cross platform #if os(Linux) import Glibc #else import Darwin #endif 96
  97. 97. Swift Package Manager Mess swift package generate-xcodeproj 97
  98. 98. Swift Build 98
  99. 99. Tester c'est linker Undefined symbols for architecture x86_64: "test2.test2.init () -> test2.test2", referenced from: test2Tests.test2Tests.(testExample () -> ()). (implicit closure #1) in test2Tests.o ld: symbol(s) not found for architecture x86_64 clang: error: linker command failed with exit code 1 99
  100. 100. 5. Évolutions 100
  101. 101. Encore plus de Frameworks 101
  102. 102. Encore plus de APIs Swift 102
  103. 103. 103
  104. 104. 104
  105. 105. Peut-on le déployer en prod ? 105
  106. 106. Oui !106
  107. 107. Enfin... 107
  108. 108. Merci ! 108
  109. 109. Simone Civetta 109
  110. 110. Je suis un développeur iOS 110
  111. 111. Je suis un développeur Back 111
  112. 112. Enfin... 112
  113. 113. 113

×