Summary:
Important because we still run into soloader incompatibilities due
to the transitive dependency of Litho on Yoga on SoLoader. Sigh.
Reviewed By: priteshrnandgaonkar
Differential Revision: D8931213
fbshipit-source-id: 7e2de85deb5975dbe3f25e8145a9226d6684357c
Summary:
This partially fixes [#132](https://github.com/facebook/Sonar/issues/132)
Yoga.podspec and YogaKit.podspec are being removed from the private repository since now they exist in the CocoaPods master repository
Pull Request resolved: https://github.com/facebook/Sonar/pull/156
Reviewed By: passy
Differential Revision: D8890062
Pulled By: priteshrnandgaonkar
fbshipit-source-id: 15ae1345c9816c1fff324cbdaff188f8ee521373
Summary:
This PR adds support for using SonarKit clients in Swift apps. Fixes#13, fixes#87
1. Swift can't import Obj-C modules which have C++ headers. For this reason, we use SonarKit as an Obj-C++ wrapper around Sonar, which is written in C++. Due to search path misconfiguration, trying to import SonarKit into a Swift project would import `xplat/Sonar/SonarPlugin.h` instead of `iOS/SonarKit/SonarPlugin.h`, which caused `file not found` errors for C++ stdlib imports like #28 because new projects don't have their search paths set up correctly.
2. The network and layout plugins have C++ definitions (struct methods, classes) in some of their headers. This causes the compiler to get confused for Swift projects, because it only supports importing Objective-C files in umbrella headers, meaning that the `SonarKit` won't build.
1. I updated the `HEADER_SEARCH_PATHS` of SonarKit.podspec's build configuration to include `${PODS_ROOT}/Headers/Private/SonarKit/**` first, which alleviates the search path issue. The Obj-C `Sample` project seems to have worked around this by including a hardcoded `${PODS_ROOT}/SonarKit/**` search path in the pbxproj, which is why Sample works but new projects (like those referenced in #28) don't. I removed this since it's no longer necessary.
2. I added a `SampleSwift` app to demonstrate using Sonar with a Swift project.
3. Because the Podfiles for `Sample` and `SampleSwift` referenced podspecs using `:podspec` instead of a concrete version, Cocoapods wouldn't copy local header files (instead, it downloads them from the source). To enable local development of these sample apps using `:path`, I added a symlink to SonarKit.podspec in the root of the directory.
4. I changed SonarKit.podspec to use a tag-based `source`, since v0.0.1 pulls from the master branch of this repo.
The layout and network plugins still don't work with Swift - in order to fix this, we'll need to work on extracting the C++ out of their headers and writing Obj-C++ wrappers for them. I decided to push this off to a later PR since this one is quite large already.
This means that we need to be able to `import SonarKit` without importing all the network/layout plugin headers. In order to make this work, I made "SonarKit/Core" the spec's `default_subspecs`.
priteshrnandgaonkar, let me know if you have any thoughts on this implementation. You can verify that the SampleSwift app works by checking out this branch, `pod install`ing in the SampleSwift directory, and building it :)

Pull Request resolved: https://github.com/facebook/Sonar/pull/106
Reviewed By: jknoxville
Differential Revision: D8890010
Pulled By: priteshrnandgaonkar
fbshipit-source-id: 449305bcc5cbeb5787c23f51b1ecb80a5cbdad32
Summary:
Force device type from BaseDevice to AndroidDevice, because we need to access adb inside AndroidDevice.
In long term, we should use DeviceShell from BaseDevice, but that need much more changes.
Differential Revision: D8876082
fbshipit-source-id: 0772a0ac361c5e3eca9c7a590281ffa786501e15
Summary: SonarConnection should have an `error` function; this stubs out the mock to have this, allowing creation for tests.
Reviewed By: jknoxville
Differential Revision: D8878130
fbshipit-source-id: 9e0f45dac4ba31ee650dfd46dcee51207cc7a9b4
Summary: Move to xplat while ensuring that the buck target alias is still valid from fbandroid.
Reviewed By: priteshrnandgaonkar
Differential Revision: D8890129
fbshipit-source-id: 97ad8eac35780715e84a2620aae4e6ed566385c9
Summary:
:third-party doesn't actually export anything. So we don't need to
explicitly depend on it as it messes with the POM generation otherwise.
Reviewed By: jknoxville
Differential Revision: D8913636
fbshipit-source-id: d0da6ed4c47e8d6b7986ec9f12960c9323ad1640
Summary:
This diff adds the support to automate iOS releases. This diff adds two scripts, one for updating all the `podspecs`, and `podfiles` with updated version number. The script also updates the version used in sample and getting started doc file.
The second script publishes a github tag.
Following will be the process for iOS release:-
1. From `fbobjc/Libraries/SonarKit/Scripts` run `sh public-ios-podspec-update.sh`, it will update all the podspecs, podfiles and docs with updated version number. Commit it and land this
2. Once the above changes are landed and synced to github, run `sh push-new-github-tag.sh` from `fbobjc/Libraries/SonarKit/Scripts` to push the tag on github
As a follow up on this diff, ideally, we should trigger second script automatically when the 1st task changes are synced to github.
Reviewed By: jknoxville
Differential Revision: D8879958
fbshipit-source-id: 8f0dc9200e8f64578af33e1446629f09c16c43f2
Summary: Switches the tree to use the view hierarchy for Litho nodes rather than Litho component hierarchy since Accessibility services interact with the views rendered. Includes a few more properties in the accessibility sidebar and updates to the segmented sidebar based on derived/non-derived properties for all views. Also adds functions to the AccessibilityUtil to be able to work on the accessibility sidebar while still leaving the non-accessibility sidebar unchanged. Eventually the accessibility panel will be removed from 'normal' mode and the original functions will no longer be necessary.
Reviewed By: blavalla
Differential Revision: D8881739
fbshipit-source-id: 9ce37e8f18025538cba2c86c0895ee38d13d024b
Summary: The receiving callbacks are executed from a thread that doesn't have an autorelease pool. That results in autoreleased objects leaking
Reviewed By: schaitoff
Differential Revision: D8889915
fbshipit-source-id: 07e9129954e6f9afea56473b590125c63ecd7092
Summary: That's the android package and all references to it.
Reviewed By: jknoxville
Differential Revision: D8875423
fbshipit-source-id: 478bb380012bc1327199d51527a7fe376824fce2
Summary: That's the last one for the OSSProject folder.
Reviewed By: jknoxville
Differential Revision: D8875198
fbshipit-source-id: f54cb571463b4ac3176f028bcdbf0608dd5a3068
Summary:
This should work with our existing shipit config. Moves the build
files to xplat and sets up a standard gradle directory structure
that we will continue to move more files into.
Reviewed By: jknoxville
Differential Revision: D8859483
fbshipit-source-id: 5df5882a3bcaee36280af68aeaa740290288e0d3
Summary:
Fixed issue with DebugComponentDescriptors being left out of accessibility tree so the AX tree now includes all Litho view nodes (not Litho accessibility nodes yet). Litho drawables have no accessibility properties so these are not included. Also changed default for getAXChildAt to do whatever the original view tree does for that node and added a getAXChildCount function to better customize the accessibility tree.
Segmented the ax sidebar into properties directly form the view and properties derived from the AccessibilityNodeInfo.
Differential Revision: D8861129
fbshipit-source-id: 987683ef45188aa9cb587cc0e5ffba8fbf40136d
Summary: At the moment sonar doesn't work with physical iOS devices. Until we add that feature, to avoid confusion, tell the user that it won't work.
Reviewed By: passy
Differential Revision: D8859223
fbshipit-source-id: 318777406877e0f769c6d0dc5bbe745ca0565f55
Summary:
Noticed issues in https://fbsonar.com/docs/stetho.html - not sure if this will push there if accepted, but suggesting the changes in any case.
Created from Diffusion's 'Open in Editor' feature.
Reviewed By: jknoxville
Differential Revision: D8852241
fbshipit-source-id: 4a3e564e22ccb1edc43aa4cc335d3a8aeb916f3b
Summary:
This moves the native setup to a separate gradle file and unpacks everything outside the build folder. That way we don't throw everything away on every incremental build.
This is an intermediate step to get to a more declarative setup like Fresco has it and get rid of the individual hacks we have for every download.
Pull Request resolved: https://github.com/facebook/Sonar/pull/154
Reviewed By: jknoxville
Differential Revision: D8833812
Pulled By: passy
fbshipit-source-id: 2424c9d6e22e6092c04af344e06939b4a6aba041
Summary:
On windows when I used a more complicated path for the sonar directory (e.g. for writing sonarCA.cert to), it failed this regex but succeeded the node fs.writeFile call.
Unless I'm missing something else this regex does, we should just let the authority of the fs module decide if it can write something.
Reviewed By: jknoxville
Differential Revision: D8822094
fbshipit-source-id: 294c9a7b70080fefcfffdddd239d321ff7faa4e1
Summary:
We have a check for whenever the server cert is expiring within 1 day, however this turns out it doesn't count certificates that have already expired.
So adding a check for those that have already expired, and regenerating them if so.
We can safely handle parse failures by assuming the cert has expired.
Reviewed By: passy
Differential Revision: D8858740
fbshipit-source-id: 6e06f9b267bcaec497b7eedd3d6c1974c788aea2
Summary:
This diff uses `tag` instead of master branch and also updates the version number to the desktop sdk.
Pull Request resolved: https://github.com/facebook/Sonar/pull/152
Reviewed By: danielbuechele
Differential Revision: D8820016
Pulled By: priteshrnandgaonkar
fbshipit-source-id: ff2e554be55254b77c4e130b35b7299abbafa77d
Summary: The second tree has access to all AX NodeInfo properties (they are not in the sidebar yet). Infrastructure set up to customize displayed information bassed on what is most useful. Descriptors for views updated to include AX functionality and non-view descriptors AX functions defaulted to null/empty. Non-view nodes (like Fragments, Window, Appication) no longer included in AX tree. Corresponding nodes will be highlighted (although not expanded) on click in either tree.
Differential Revision: D8795800
fbshipit-source-id: cf2333f69bfecca3ff84aae62681c684dfa14bf3
Summary:
Update some build dependencies (gradle, android plugin) and make some
minor cleanups in the gradle files along the way.
Pull Request resolved: https://github.com/facebook/Sonar/pull/151
Reviewed By: priteshrnandgaonkar
Differential Revision: D8818841
Pulled By: passy
fbshipit-source-id: 78b6592dbf967553aadead57a60023a0b5ae79b6
Summary:
Depends on #149.
Version bump for Android to bring it in line with the top-level version.
Pull Request resolved: https://github.com/facebook/Sonar/pull/150
Reviewed By: priteshrnandgaonkar
Differential Revision: D8804324
Pulled By: passy
fbshipit-source-id: 6c796f34cf064f117b6195b3c88d9b5c100f8dbb
Summary:
Compile against a static version of OpenSSL for better compatibility
with apps that already use OpenSSL in some fashion.
Pull Request resolved: https://github.com/facebook/Sonar/pull/149
Reviewed By: priteshrnandgaonkar
Differential Revision: D8804169
Pulled By: passy
fbshipit-source-id: 4de66a77806a3b3f01b2cf5f253916f2cf6f48e8
Summary: Accidentally the version number passed to the build script was not only the patch number but the full semver-number. The build script is expecting a single number and there for ignored the version number that was passed. This caused the build to always have patch version 0.
Reviewed By: priteshrnandgaonkar
Differential Revision: D8804473
fbshipit-source-id: a116cac69066141fe8c8ed62020d16a1a7c40079
Summary: Small tweaks so that Sonar can be started easily on windows.
Reviewed By: danielbuechele
Differential Revision: D8769592
fbshipit-source-id: 084dd50e5600a7e2e9c5544e3e79a18614933fdc
Summary: electro-builder automatically publishes when it detects builds on TravisCI. This disables this behaviour, as we want to manually publish releases.
Reviewed By: jknoxville
Differential Revision: D8783066
fbshipit-source-id: d8723c87b879b3ef7ee02585997a13cb55095e65
Summary:
Plugins had their custom setup method which needed to be called externally. That is what consturctors are for. This removes the setup method and moves ths logic to the constructor.
The setup method was called to late which caused the graphQL plugin to crash. With the logic now being in the constructor, it is ensured that it is called at the initialization.
Reviewed By: jknoxville
Differential Revision: D8769807
fbshipit-source-id: 7b4ab4815bbe397c80998adcb89ca361df6970d3
Summary:
This PR updates the Network plugin's response parser to ignore the case of the `Content-Encoding` header in the response. This was preventing responses that are gzipped from being uncompressed. I tested this with gzipped responses through the OkHttp interceptor on Android. This could potentially address #79 as I was experiencing that issue before this change.

Pull Request resolved: https://github.com/facebook/Sonar/pull/143
Differential Revision: D8780509
Pulled By: danielbuechele
fbshipit-source-id: 1a2d86226a8a0204ff43eb5f9394a56c04fd2d8d
Summary:
This PR includes documentation for using the `SonarOkhttpInterceptor` for applications using the `OkHttp` network stack. The docs were modelled on the [Stetho docs](http://facebook.github.io/stetho/#enable-network-inspection)
Fixes#22.
Pull Request resolved: https://github.com/facebook/Sonar/pull/144
Differential Revision: D8780506
Pulled By: danielbuechele
fbshipit-source-id: fb2ddd4356b421c3baf0a80a410dd579ebc1bd8d
Summary:
This saved the state of the network plugin even when switching between plugins using persistedState.
A bug in the Android implementation didn't clear the events that were already sent to the desktop.
Reviewed By: jknoxville
Differential Revision: D8752098
fbshipit-source-id: 152ec5da83958ad8124686f780d39983cbce563f
Summary:
Two pros are passed into every plugin to persist state:
- `this.props.persistedState` which is the object of the persisted state
- `this.props.setPersistedState` which can be used to modify the persisted state
The state itself is stored in redux and therefore persisted when switching plugins.
The lifecycle hooks used a HOC are now implemented by the `ref`-function, which makes the code a little cleaner.
Reviewed By: jknoxville
Differential Revision: D8752097
fbshipit-source-id: d4f081f149cd840a29f1132bde91d72d3fba67ed
Summary:
One design goal of sonar is to never cause the host app to crash or hang.
For this reason, we do all heavy work in a background thread.
If we detect that it's not running in it's own thread, just return so we don't hold up the caller.
Reviewed By: danielbuechele
Differential Revision: D8767288
fbshipit-source-id: e146cc2cfe5c3e62d12f527ff79f24c74873d4ff